none
Como fazer paginação de dados com PagedList em Asp.Net MVC? RRS feed

  • 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-->

    terça-feira, 6 de fevereiro de 2018 17:42

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.

    terça-feira, 6 de fevereiro de 2018 18:11