Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    • Como a Uber calcula o tempo estimado de chegada
    • 30 APIs Gratuitas para desenvolvedores
    • Por que escalar escrita é tão mais difícil do que escalar leitura?
    • MongoDB Analyzer para .NET: Visualize e otimize suas consultas de forma simples
    • Cardinalidade: O Conceito que Transforma o Desempenho de Bancos de Dados SQL e NoSQL
    Facebook X (Twitter) Instagram
    Código Simples .NETCódigo Simples .NET
    Código Simples .NETCódigo Simples .NET
    Home»Front-End»Criar paginação em MVC asp.net C#

    Criar paginação em MVC asp.net C#

    Jhonathan SoaresBy Jhonathan Soares14 de fevereiro de 20141 Min Read Front-End
    Share
    Facebook Twitter LinkedIn WhatsApp Copy Link

    Olá pessoal!

    Sexta-feira “brava” e eu fazendo post! hehehe. Pra terminar a semana, vou passar um tutorial muito útil que me fez quebrar a cabeça anos atrás.

    É como criar uma paginação em MVC de maneira simples.

    paginacao-mvc

    Bom, inicialmente vamos criar uma Model que vai definir os componentes da nossa paginação, veja nossa model :

     
     
     public class PaginacaoModel
        {
            public int PaginaAtual { get; protected set; }
            public int TotalRegistros { get; protected set; }
            public int RegistrosPorPagina { get; protected set; }
            public int TotalPaginas { get; protected set; }
            public int Inicio { get; protected set; }
            public int Final { get; protected set; }
            public string Link { get; protected set; }
    
            public PaginacaoModel(int paginaAtual, int totalRegistros, int registrosPorPagina, string link)
            {
                this.PaginaAtual = paginaAtual;
                this.TotalRegistros = totalRegistros;
                this.RegistrosPorPagina = registrosPorPagina;
                this.Link = link;
    
                SetTotalPaginas();
                SetInicioFimPagina();
            }
    
            #region Metodos Privados
            private void SetTotalPaginas()
            {
                int qtdePaginas;
    
                if ((this.TotalRegistros % this.RegistrosPorPagina) == 0)
                    qtdePaginas = (this.TotalRegistros / this.RegistrosPorPagina);
                else
                    qtdePaginas = (this.TotalRegistros / this.RegistrosPorPagina) + 1;
    
                this.TotalPaginas = qtdePaginas;
            }
    
            private void SetInicioFimPagina()
            {
                int i = 0;
                int af = 0;
                int f = 0;
                int ai = 0;
    
                if (this.PaginaAtual - 4 < 1)
                {
                    i = 1;
                    af = Math.Abs(this.PaginaAtual - 4) + 1;
                }
                else
                    i = this.PaginaAtual - 4;
    
                if (this.PaginaAtual + 4 >= this.TotalPaginas)
                {
                    f = this.TotalPaginas;
                    ai = Math.Abs(this.TotalPaginas - this.PaginaAtual - 4);
                }
                else
                    f = this.PaginaAtual + 4;
    
                if (af + f >= this.TotalPaginas)
                    f = this.TotalPaginas;
                else
                    f = f + af;
    
                this.Final = f;
    
                if (i - ai <= 0)
                    i = 1;
                else
                    i = i - ai;
    
                this.Inicio = i;
            }
    
            public bool PossuiAnterior
            {
                get
                {
                    return (PaginaAtual > 1);
                }
            }
    
            public bool PossuiProxima
            {
                get
                {
                    return (PaginaAtual < this.TotalPaginas);
                }
            }
            #endregion
        }
        
        

     

    Com a nossa model criada, vamos criar uma partial view que vai definir nosso html :

    @model namespacedoseuprojeto.Models.PaginacaoModel
               
    @if (Model.TotalPaginas > 1)
    {
    <div class="paginacao">
        <ul class="menu-horizontal">
            <li><span class="paginas">Pág @Model.PaginaAtual de  @Model.TotalPaginas</span></li>
            @if (Model.PossuiAnterior)
            {
                <li><a class="static" href="@Model.Link&pagina=@(Model.PaginaAtual - 1)">  ◄ </a></li>
            }
            
            @for (int c = Model.Inicio; c <= Model.Final; c++)
            {
                if (c == Model.PaginaAtual)
                {
                    <li><a class="active" href="#">@c.ToString()</a></li>    
                }
                else
                {
                    <li><a href="@Model.Link&[email protected]()">@c.ToString()</a></li>    
                }
            }
    
            @if (Model.PossuiProxima)
            {
                <li><a class="static" href="@Model.Link&pagina=@(Model.PaginaAtual + 1)"> ► </a></li>
            }
        </ul>
    </div>
    }
    

     

    Claro que não podemos esquecer de criar a chamada na controller:

           public ActionResult Index(int pagina = 1)
            {
                //metodo generico de busca
                Buscar(pagina);
                return View();
            }
    
            private readonly int _registrosPorPagina = 10;
            private void Buscar(int pagina)
            {
                int totalRegistros;
    
                //Realizar o seu método de busca com o parametro de paginação
                
                //instanciar sua paginação, colocando a action e controller desejada
                PaginacaoModel paginacao = new PaginacaoModel(pagina, totalRegistros, _registrosPorPagina, Url.Action("Action", "Controller"));
                ViewBag.Paginacao = paginacao;
            }

     

    Vamos colocar alguns estilos css :

     
     .paginacao{width:100%;display:inline-block;overflow:hidden;height:25px;font:bold 12px Arial;}
     .paginacao .menu-horizontal {color:#1c69b1;}
     .paginacao .menu-horizontal .paginas {font:normal 14px Arial;display:block;margin:5px 20px 0 5px;}
     .paginacao .menu-horizontal .paginas static {font:normal 14px Arial;display:block;margin:0 20px 0 5px;}
     .paginacao .menu-horizontal a{border:1px solid #D2D2D2;border-radius:4px 4px 4px 4px;color:#333;display:block;box-shadow:0 0 3px #CDCDCFD;margin:0 4px;padding:4px;}
     .paginacao .menu-horizontal .active{color:#1C69B1;}
    

     

    E claro pra terminar a nossa chamada na view :

     
     
     @Html.Partial("_Paginacao", (namespace.Models.PaginacaoModel)ViewBag.Paginacao)
       
       

    E pronto!

    Seu projeto já funciona com paginação e tudo mais! 😉

    Ps: Para criação de métodos de paginação eu utilizei o LinqKit que é uma biblioteca que se encaixa muito bem para Entity, você pode dar uma olhada aqui.

    Pessoal, até a próxima!

    E não se esqueçam de dar aquela conferida na nossa Fã Page

    Share. Facebook Twitter LinkedIn Telegram WhatsApp Copy Link
    Jhonathan Soares
    • Website
    • Facebook
    • X (Twitter)
    • LinkedIn

    Criador do blog Código Simples e com mais 15 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist.

    Posts Relacionados

    Happy Hour com Dados #17 – Azure vs AWS vs GCP

    Front-End 26 de maio de 20211 Min Read

    Blazor .NET – CRUD com MongoDB

    C# Front-End NoSql 2 de janeiro de 20195 Mins Read

    Introdução ao Blazor, o SPA da Microsoft

    C# Front-End 29 de dezembro de 20185 Mins Read
    Newsletter

    Digite seu endereço de e-mail para receber notificações de novas publicações por e-mail.

    Junte-se a 25mil outros assinantes
    Posts recentes
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    • Como a Uber calcula o tempo estimado de chegada
    • 30 APIs Gratuitas para desenvolvedores
    Categorias
    • Arquitetura (14)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (90)
      • NoSql (58)
      • Sql (38)
    • Boas práticas (29)
      • Gestão & Produtividade (1)
      • Metodologias Ágeis (6)
    • Cursos (52)
    • Dicas (105)
    • Front-End (92)
    • IA (1)
    • Linux (6)
    • NodeJS (4)
    • Post do Leitor (9)
    • Python (5)
    • Seo (12)
    • Tecnologia (30)
      • ITIL (1)
      • Padrões de Projeto (4)
    • Testes (2)

    VEJA TAMBÉM

    Cursos
    12 de fevereiro de 20166 Mins Read

    1000 livros gratuitos sobre programação!

    Olha que dica bacana! A pagina só com livros sobre programação é mantida no GitHub…

    30 APIs Gratuitas para desenvolvedores

    Facebook X (Twitter) Instagram LinkedIn

    Type above and press Enter to search. Press Esc to cancel.

    Vá para versão mobile