Pergunta

Eu tenho uma grade com informações de contato que eu preciso ser capaz de percorrer.

Todo o encanamento já está em vigor , com um último detalhe. Paginação é feito através de um simples parâmetro queryString p, por exemplo www.myurl.com/grid?p=3 seria a terceira página; o repositório é buscar automaticamente os dados certos, e também o número total de itens. O tamanho de cada página é definida em outro lugar e eu não preciso me preocupar com isso na cadeia de consulta.

No entanto, Eu apoio a pesquisa etc. também. O termo de pesquisa procurado em denotado como q na minha QueryString. Então agora eu posso ter uma combinação:. Www.myurl.com/grid?q=tom&p=2 que pesquisas de "tom" e puxa a segunda página de resultados

O problema que enfrentamos agora, já que o q (ou outros) parâmetros pode estar presente na cadeia de consulta, como faço para criar um pager para este (o que seria necessário para manter os parâmetros originais, por isso, se eu clicar em "página 2" ele precisa ir a partir

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

    para

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

Como posso fazer isso?

Foi útil?

Solução

Eu fiz uma pergunta semelhante ontem. Talvez você queira dar uma olhada Preserve dados em .NET MVC

Segue-se o código copiado do livro 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();
    }
}

Outras dicas

Então, você precisa ter seus links de páginas direcionar o usuário para o mesmo URL, mas com um valor de "página" diferente. A maneira mais óbvia de fazer isso é ter o seu código que processa uma página link de agarrar a string de consulta da requisição atual, modificar o valor "página", e tornar um link usando a cadeia modificada.

Como alternativa, e esta é a abordagem que eu tomei, você pode definir uma nova rota para a "Lista" suas páginas, que inclui todos os valores paginação e classificação. Dessa forma, eles são parte da URL, mas também muito fácil de manusear em seu controlador.

Um exemplo que inclui triagem e valores de paginação pode ser algo como isto:

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 o seu método de ação "Lista" precisa ser capaz de interpretar os valores e manipular os dados em conformidade. Isto pode não ser o que a sua realmente procurando, mas eu apenas pensei que eu ia jogá-lo lá fora.

LADO: Eu também escrevi um atributo de filtro [Lista] acção que pega esses valores da rota e (se o modelo é uma coleção) aplica automaticamente a paginação triagem e na OnActionExecuted. Desta forma, toda a minha ação tem a fazer é recuperar os dados e definir o modelo.

Eu persistir os valores de pesquisa para cada forma na sessão. Nos métodos que respondem à procura ou paginação, eu primeiro carregar todos os valores da sessão, em seguida, substituir-los (e definir os valores de sessão, se necessário), com valores dos parâmetros querystring ou forma, dependendo se é um get ou post . Desta forma, eu não precisa se preocupar com o código paging incluindo os critérios de pesquisa - ele simplesmente usa o que já está armazenado. Se eu quiser fazer uma nova pesquisa, em seguida, os valores na mudança caixas de pesquisa e a busca é realizada utilizando um botão de filtro -., Que se inicia com os resultados de página 1

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top