Pregunta

Tengo una acción llamada Lista que muestra los resultados de una búsqueda.Recibe parámetros a través de la cadena de consulta porque son opcionales.La firma de mi método se ve así:

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

CategoryIDs es un cuadro de selección múltiple y estoy haciendo todo a través de una solicitud GET.Lo que debo hacer es crear un enlace en mi vista a la página siguiente pero conservar los mismos parámetros de búsqueda.Sé que puedo crear el enlace a mano, pero es posible utilizar cualquiera de los métodos de enrutamiento integrados, especialmente cuando los ID de categoría deben tener el formato "?categoryID=1&categoryID=2&categoryID=3" para vincularlos a la lista.

¿Fue útil?

Solución

Creo que no hay sobrecarga ActionLink que le ayuda a hacer que por defecto. Es necesario para rellenar la instancia RouteValueDictionary con los parámetros que desee incluir.

En la lista de categorías, tratar s / t como categoryIDs=2,3,4,5 etc. Puesto que las claves que se repiten no están permitidos en <=>. Después de eso, en el método de acción tendrá que analizar la cadena en la lista de números enteros.

Otros consejos

Deberías poder hacer esto:

Todos los valores actuales deben pasarse de forma predeterminada.Sin embargo, tendría que probarlo para asegurarme de que estoy haciendo referencia a la sobrecarga correcta.

Me gusta pasar un objeto como un parámetro para las acciones de búsqueda, y luego pasar el objeto de parámetro a la vista. Así que con un poco de código en el controlador como este (nota que estoy usando la clase PagedList de 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
    });
}

Por lo que su vista de búsqueda hereda de la ViewPage genérica con una declaración página como esta:

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

A continuación, en la vista de búsqueda, puede hacer algo como esto ...

<% for(int i = 0; i < Model.Results.TotalPages; i++) { %>
    <%= Html.ActionLink(i + 1).ToString(), "Search",
        Model.Parameters.GetPage(i + 1)) %>
<% } %>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top