Pregunta

Tengo una cuadrícula con información de contacto que necesito para poder hojear.

Toda la tubería ya está en su lugar , con un último detalle. La paginación se realiza mediante un simple parámetro p Querystring, p. www.myurl.com/grid?p=3 sería la tercera página; el repositorio recupera automáticamente los datos correctos y también el recuento total de elementos. El tamaño de cada página se define en otro lugar y no necesito preocuparme por eso en la cadena de consulta.

Sin embargo, también apoyo la búsqueda, etc. El término de búsqueda buscado en denotado como q en mi Querystring. Entonces ahora puedo tener una combinación: www.myurl.com/grid?q=tom&p=2 que busca "tom". y saca la segunda página de resultados.

El problema que enfrento ahora, dado que los parámetros q (u otros) pueden estar presentes en la cadena de consulta, ¿cómo puedo crear un localizador para esto (que necesitaría mantener los parámetros originales, por lo que si hago clic en " página 2 " debe ir desde

  • www.myurl.com/grid?a=1&b=xyz&q=tom

    a

  • www.myurl.com/grid?a=1&b=xyz&q=tom&p=2

¿Cómo puedo hacer esto?

¿Fue útil?

Solución

Hice una pregunta similar ayer. Tal vez quieras ver Conservar datos en .net mvc

El siguiente

es el código copiado del libro

de Steve Sanderson.
public static class PagingHelpers
{
    public static string PageLinks(this HtmlHelper html, int currentPage,
    int totalPages, Func<int, string> pageUrl)
    {
        StringBuilder result = new StringBuilder();
        for (int i = 1; i <= totalPages; i++)
        {
            TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag

            tag.MergeAttribute("href", pageUrl(i));
            tag.InnerHtml = i.ToString();
            if (i == currentPage)
                tag.AddCssClass("selected");


            result.AppendLine(tag.ToString());
        }
        return result.ToString();
    }
}

Otros consejos

Por lo tanto, debe hacer que los enlaces de su página dirijan al usuario a la misma URL pero con una " página " diferente valor. La forma más obvia de hacer esto es hacer que su código que representa un enlace de página tome la cadena de consulta de la solicitud actual, modifique la " página " valor, y renderizar un enlace usando la cadena modificada.

Alternativamente, y este es el enfoque que he tomado, puede definir una nueva ruta para su " lista " páginas, que incluye los valores de paginación y clasificación. De esta forma, forman parte de la URL pero también son muy fáciles de manejar en su controlador.

Un ejemplo que incluye valores de clasificación y paginación podría verse más o menos así:

routes.MapRoute(
    "List",
    "{controller}/List/{pageNumber}/{sortBy}/{sortOrder}/{pageSize}",
    new { action = "List", sortBy = "Id", sortOrder = "Asc", pageNumber = 1, pageSize = 10 },
    new { sortBy = @"[A-Za-z0-9+-]*", sortOrder = "Asc|Desc", pageNumber = @"\d{1,6}", pageSize = @"\d{1,6}" });

Obviamente su " Lista " El método de acción debe ser capaz de interpretar los valores y manejar los datos en consecuencia. Puede que esto no sea lo que realmente estás buscando, pero pensé en tirarlo por ahí.

A UN LADO: También he escrito un atributo de filtro de acción [Lista] que recoge estos valores de la ruta y (si el modelo es una colección) aplica automáticamente la clasificación y paginación en OnActionExecuted. De esta manera, todo lo que tengo que hacer es recuperar los datos y configurar el modelo.

Persisto los valores de búsqueda para cada formulario en la sesión. En los métodos que responden a la búsqueda o la paginación, primero cargo los valores de la sesión, luego los anulo (y establezco los valores de la sesión, si es necesario) con valores de la cadena de consulta o los parámetros del formulario, dependiendo de si es un get o post . De esta manera, no tengo que preocuparme por el código de paginación, incluidos los criterios de búsqueda, simplemente usa lo que ya está almacenado. Si quiero hacer una nueva búsqueda, los valores en los cuadros de búsqueda cambian y la búsqueda se realiza con un botón de filtro, que comienza con los resultados de la página 1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top