Frage

Ich habe eine Aktion namens Liste, die die Ergebnisse einer Suche zeigt. Er empfängt Parameter durch die Abfragezeichenfolgeflag weil sie optional sind. Meine Methode Signatur sieht wie folgt aus:

public ActionResult List(List<int> categoryIDs, string school, int? stateID, int? page)

CategoryIDs ist eine Multi-Select-Box und ich alles über eine GET-Anfrage tue. Was ich tun muß, ist ein Link in meiner Ansicht nach auf die nächste Seite erstellen, aber die gleichen Suchparameter beibehalten. Ich weiß, dass ich den Link von Hand bauen können, aber es ist möglich, eine der besonders Methode Einbau-Routing zu verwenden, wenn die CategoryIDs formatiert werden müssen, wie „? CategoryID = 1 & categoryID = 2 & categoryID = 3“, um auf die Liste gebunden zu werden?

War es hilfreich?

Lösung

Ich denke, es gibt keine ActionLink Überlastung, die Sie standardmäßig tun, das hilft. Sie müssen die RouteValueDictionary Instanz mit den Parametern füllen Sie einschließen möchten.

Für die Liste der Kategorie, versuchen s / t wie categoryIDs=2,3,4,5 usw., da sich wiederholende Schlüssel in RouteValueDictionary nicht erlaubt. Danach wird in der Aktionsmethode müssen die Zeichenfolge in der Integer-Liste analysieren.

Andere Tipps

Es soll möglich sein, dies zu tun:

Alle aktuellen Werte sollten standardmäßig übergeben werden. Ich würde es auszuprobieren obwohl sicherzustellen, dass ich bin Referenzierung der richtige Überlastung.

Ich mag ein Objekt als Parameter zu übergeben Aktionen suchen, und dann das Parameter-Objekt zur Ansicht übergeben. Also mit einigen Code in Ihrem Controller wie folgt aus (beachten Sie, ich Rob Conery der PagedList Klasse bin mit ):

public class SearchParameters {
    public string School { get; set; }
    public int? StateID { get; set; }
    public int? Page { get; set; }

    public SearchParameters GetPage(int page) {
        return new SearchParameters {
            School = School,
            StateID = StateID,
            Page = page
        };
    }
}

public class SearchViewModel {
    public PagedList<[YourResultType]> Results { get; set; }
    public SearchParameters Parameters { get; set; }
}

// ...

public ActionResult Search(SearchParameters parameters) {
    IQueryable<[YourResultType]> query;
    // ... do some stuff to get your search results

    return View("Search", new SearchViewModel {
        Results = query.ToPagedList(parameters.Page - 1), 15),
        Parameters = parameters
    });
}

So Ihre Suche erbt von der generischen Viewpage mit einer Seite Erklärung wie folgt aus:

<%@ Page ... Inherits="ViewPage<SearchViewModel>" %>

Dann in Ihrer Suche, können Sie etwas tun können ...

<% for(int i = 0; i < Model.Results.TotalPages; i++) { %>
    <%= Html.ActionLink(i + 1).ToString(), "Search",
        Model.Parameters.GetPage(i + 1)) %>
<% } %>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top