Paginação e classificação grades com ASP.Net MVC
-
20-08-2019 - |
Pergunta
Eu sou novo para MVC, e não estou seguindo como você faria paginação e classificação em uma grade. Eu estou acostumado a usar o controle asp.Net GridView com um ObjectDataSource apontada para objetos em nossa camada de negócios -. E, nesse caso, as ODS cuida de toda a paginação e ordenação usando os métodos que o nosso ORM gera sobre os objetos
Eu olhei usando o mesmo ORM com MVC - e as coisas funcionam bem lá - eu apenas loop thru as coleções para construir a tabela na página - mas sem os ODS para lidar com a paginação e classificação, eu sou confuso a respeito de como eu iria lidar com isso. Eu teria um controlador separado para a paginação e classificação?
Eu entendo que eu preciso fazer a minha própria - mas onde eu começo? Eu criei um CustomerController, e uma vista que exibe uma tabela de clientes que se parece com abaixo - e eu quero classificar colunas FirstName ou LastName. Meu modelo tem um método Sort () nele que vou dar uma expressão de cadeia tipo no formato que seria usado por um par GridView / ODS. Será que eu criar uma nova ação no meu CustomerController chamada Sort, e colocar um ActionLink no meu cabeçalho?
<table>
<tr>
<th>
First Name
</th>
<th>
Last Name
</th>
</tr>
<% foreach (var item in Model)
{ %>
<tr>
<td>
<%= Html.Encode(item.FirstName) %>
</td>
<td>
<%= Html.Encode(item.LastName) %>
</td>
</tr>
<% } %>
</table>
Solução
Seu pode usar o mesmo controlador, basta adicionar um parâmetro adicional e nomeá-la espécie. Em seguida, verifique no controlador o valor tipo tem, e classificar os dados com base nesse parâmetro.
Ou se você quer fazer as coisas no lado do cliente, você pode usar algo como tablesorter , um plugin para jQuery.
Outras dicas
hoje em dia MVC 3 agora tem um WebGrid fora da caixa. Eu sei que esta questão é de um tempo atrás, mas acabei nele quando se olha para algo sobre WebGrid. Então eu pensei que deve ter uma resposta mencionar o novo WebGrid.
Aqui estão algumas boas mensagens sobre como usá-lo:
http://www.dotnetcurry.com/ShowArticle.aspx?ID=615
http://www.nickharris.net/tag/webgrid/
Ele suporta classificação, paginação e também algumas coisas Ajax. Ele pode fazer muito para você já, mas você também pode especificar cada coluna separada separadamente.
Update:
Há também muitas bibliotecas JavaScript disponíveis que podem fazer a tabela para você. Eu pessoalmente gosto de usar DataTables . Você pode alimentá-lo uma tabela html existente gerado no servidor ou dar-lhe um ponto final onde ele pode recuperar os dados (todas ou apenas uma página).
Há muito mais, apenas o Google ao redor.
Com MVC você meio que tem que rolar sua própria classificação, paginação, etc. Gostaria de sugerir YUI DataTable ou algumas das outras JavaScript Grids lá fora.
Além disso, se você encontrar o seu próprio fazendo pesado Data Grid trabalho que você pode querer dar uma olhada em ASP.NET Dynamic Data, que é projetado especificamente para estes tipos de interações contra ORM.
Primeiro uso jQuery . jQuery é seu amigo. Em seguida, use este impressionante e provavelmente o melhor controle de grade para jQuery jqGrid .
Em seu CustomerController criar uma ação chamada CustomerData. Toda a interação com a rede deve apontar para essa ação.
aqui para toneladas de exemplos sobre como usar jqGrid.