Usuário com melhor resposta
Como fazer paginação de dados com PagedList em Asp.Net MVC?

Pergunta
-
Tenho uma tabela de usuários com 10.000 cadastros. Quero paginar esses registros usando LIMIT e OFFSET com PagedList mas nao estou conseguindo fazer isso. Atualmente o sistema busca todos os registros para depois paginar e não quero que seja assim, quero paginar de forma real.
Como fazer isso ?
Estou tentando assim
Model Search
public class SearchUsuario{ public IPagedList<ViewUsuario> lista { get; set; } public SearchUsuario(){ lista = new List<ViewUsuario>().ToPagedList(1, 50); } }
Model View
public class ViewUsuario { public String nome { get; set; } }
Controller
public ActionResult view(int? page){ int p = page ?? 1; int pageSize = 20; SearchUsuario search = new SearchUsuario(); IQueryable<Usuario> lista = new UsuarioDAO().GetAll(); //retorna todos os usuarios List<ViewUsuario> listaModel = new List<ViewUsuario>(); foreach(Usuario u in lista){ Debug.WriteLine(u.nome); ViewUsuario view = new ViewUsuario(); view.nome = u.nome; listaModel.Add(view); } search.lista = listaModel.ToPagedList(p, pageSize); return View(search); }
View HTML
@using PagedList.Mvc @model SearchUsuario @{ ViewBag.Title = "view"; Layout = "~/Views/Shared/_Layout.cshtml"; } <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading">@Language.Users</div> <div class="panel-body"> <div class="table-responsive"> <table id="grid" class="table table-striped table-hover" cellspacing="0"> <thead> <tr> <th>Nome</th> </tr> </thead> <tfoot> <tr> <th>Nome</th> </tr> </tfoot> <tbody> @foreach (ViewUsuario m in Model.lista){ <tr> <td>@Html.DisplayFor(i => m.nome)</td> </tr> } </tbody> </table> </div><!--/div table-responsive--> </div><!--div panel-body --> <div class="panel-footer"> Pagina @Model.lista.PageNumber de @Model.lista.PageCount @Html.PagedListPager(Model.lista, page => Url.Action("view", new{ page = page })) </div><!--/panel-footer--> </div><!--/div panel--> </div><!--/div col--> </div><!--/div row-->
Respostas
-
Você precisa chamar o ToPagedList antes de navegar entre os registros, pois isto está forçando um SELECT de todos registros.
IQueryable<Usuario> lista = new UsuarioDAO().GetAll().ToPagedList(p, pageSize); //retorna todos os usuarios List<ViewUsuario> listaModel = new List<ViewUsuario>(); foreach(Usuario u in lista){ Debug.WriteLine(u.nome); ViewUsuario view = new ViewUsuario(); view.nome = u.nome; listaModel.Add(view); } search.lista = listaModel; return View(search);
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
- Sugerido como Resposta Juliano Nunes Silva Oliveira sexta-feira, 16 de fevereiro de 2018 00:26
- Marcado como Resposta welington jrModerator sábado, 17 de fevereiro de 2018 12:26