Domanda

Ho un'azione chiamata elenco che mostra i risultati di una ricerca. Riceve i parametri attraverso la querystring perché sono opzionali. La mia firma del metodo è simile al seguente:

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

CategoryIDs è una casella di selezione multipla e sto facendo tutto sopra una richiesta GET. Che cosa devo fare è creare un collegamento a mio avviso, alla pagina successiva, ma mantengono gli stessi parametri di ricerca. So di poter costruire il link a mano, ma è possibile utilizzare uno dei built-in metodo di routing soprattutto quando le categoryIDs devono essere formattate come "? IDCategoria = 1 & IDCategoria = 2 & IDCategoria = 3" di essere vincolato alla lista?

È stato utile?

Soluzione

Credo che ci sia nessun sovraccarico ActionLink che ti aiuta a fare che di default. È necessario per popolare il RouteValueDictionary esempio con i parametri che si desidera includere.

Per l'elenco di categorie, provare s / t come categoryIDs=2,3,4,5 ecc dato le chiavi che si ripetono non sono ammessi nella <=>. Dopo di che, nel metodo di azione sarà necessario analizzare la stringa nella lista intero.

Altri suggerimenti

Si dovrebbe essere in grado di fare questo:

Tutti i valori di corrente dovrebbero essere passati per impostazione predefinita. Avrei dovuto provare anche se per assicurarsi che sto riferimento del sovraccarico corretta.

mi piace passare un oggetto come un parametro per le azioni di ricerca, e quindi passare l'oggetto parametro per la vista. Quindi, con un po 'di codice nel controller come questo (nota che sto utilizzando classe PagedList Rob Conery ):

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
    });
}

Così la vostra ricerca Mostra eredita dalla generica ViewPage con una dichiarazione pagina come questa:

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

Poi, nella vista di ricerca, si può fare qualcosa di simile ...

<% for(int i = 0; i < Model.Results.TotalPages; i++) { %>
    <%= Html.ActionLink(i + 1).ToString(), "Search",
        Model.Parameters.GetPage(i + 1)) %>
<% } %>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top