Neste artigo eu vamos iniciar a criação de uma aplicação ASP .NET Core MVC usando o Entity Framework Core no Visual Studio. |
Estamos criando uma aplicação Web usando ASP.NET Core MVC com Entity Framework Core e Visual Studio.
No artigo anterior implementamos o filtro de dados adicionando uma caixa de pesquisa na página Index.
Neste artigo vamos continuar incrementando a página Index incluindo o recurso da paginação dos dados.
1 - Incluindo a paginação na página Index
Para adicionar o recurso da paginação para a página Index dos estudantes vamos criar uma classe chamada PaginatedList que usa as instruções Skip e Take para filtrar dados no servidor em vez de sempre recuperar todas as linhas da tabela.
Em seguida, faremos alterações adicionais no método Index do controlador e depois vamos adicionar botões de paginação na respectiva view Index.
Selecione o
projeto e no menu Tools clique em Add Class e informe o nome
PaginatedList.cs e clique no botão Add.
A seguir
inclua o código abaixo nesta classe :
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore;
namespace UniversidadeMacoratti public PaginatedList(List<T> items, int count, int pageIndex, int pageSize) this.AddRange(items); public bool HasPreviousPage public bool HasNextPage public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize) |
O método CreateAsync
neste código obtém o tamanho da página e número de
página e aplica as instruções Skip e Take
ao IQueryable. Quando ToListAsync for chamado no
IQueryable, ele retornará uma lista contendo apenas a
página solicitada. As propriedades HasPreviousPage e
HasNextPage podem ser usadas para ativar ou
desativar os botões de paginação Anterior e Próxima.
O método CreateAsync é usado em vez de um
construtor para criar o objeto PaginatedList<T>
porque construtores não podem executar código
assíncrono.
2
- Incluindo o recurso da paginação no método Index do
Controlador
Agora vamos incluir o recurso de paginação no controlador EstudantesController.
Abra o arquivo EstudantesController.cs e altere o método Index() conforme o código mostrado a seguir:
// GET: Estudantes public async Task<IActionResult> Index( string ordem, string filtroAtual, string filtro, int? pagina) { ViewData["ordemAtual"] = ordem; ViewData["NomeParm"] = String.IsNullOrEmpty(ordem) ? "nome_desc" : ""; ViewData["DataParm"] = ordem == "Data" ? "data_desc" : "Data";
if (filtro != null) ViewData["filtroAtual"] = filtro; var estudantes = from est in _context.Estudantes if (!String.IsNullOrEmpty(filtro)) switch (ordem) int pageSize = 3;
|
Esse código adiciona um parâmetro de número de página, um parâmetro de ordem de classificação atual e um parâmetro de filtro atual para a assinatura do método.
Na primeira vez que a
página for exibida, ou se o usuário não clicar em um
link de paginação ou classificação, todos os parâmetros
serão nulos. Se um link de paginação for clicado, a
variável pagina conterá o número da página a ser
exibido.
O elemento ViewData chamado ordemAtual fornece a
view com a ordem de classificação atual, pois isso deve
ser incluído nos links de paginação para manter a ordem
de classificação durante a paginação.
O elemento ViewData denominado filtroAtual
fornece a view com a string de filtro actual. Esse valor
deve ser incluído nos links de paginação para manter as
configurações de filtro durante a paginação e deve ser
restaurado para a caixa de texto quando a página é
exibida novamente.
Se a seqüência de pesquisa for alterada durante a
paginação, a página deve ser redefinida para 1, porque o
novo filtro pode resultar em dados diferentes para
exibição. A string de pesquisa é alterada quando um
valor é inserido na caixa de texto e o botão Enviar
é pressionado. Nesse caso, o parâmetro filtro não é
nulo.
Ao final do método Index, o método PaginatedList.CreateAsync converte a consulta do estudante em uma única página de estudantes em um tipo de coleção que ofereça suporte à paginação. Essa única página de alunos é então passada para a view.
O método PaginatedList.CreateAsync toma um número de página. Os dois pontos de interrogação representam o operador nulo-coalescente. O operador nulo-coalescente define um valor padrão para um tipo anulável; A expressão (página ?? 1) significa retornar o valor da página se ela tiver um valor, ou retornar 1 se a página for nula.
3 - Incluindo os links na view Index
Agora vamos definir o código abaixo na view Index da pasta Views/Estudantes:
@model PaginatedList<UniversidadeMacoratti.Models.Estudante>
@{ <form asp-action="Index" method="get"> <table class="table"> <a asp-action="Index"
|
Nota: Novamente estamos usando as Tag Helpers <form> , asp-action e asp-route.
Os links de cabeçalho de coluna usam a string de consulta para passar a string de pesquisa atual para o controlador para que o usuário possa classificar os resultados do filtro:
<a asp-action="Index"
asp-route-ordem="@ViewData["DataParm"]"
asp-route-filtroAtual="@ViewData["filtroAtual"]">Data de
Matrícula</a>
Os botões de
paginação são exibidos usando tag-helpers:
<a
asp-action="Index"
asp-route-ordem="@ViewData["ordemAtual"]"
asp-route-pagina="@(Model.PageIndex - 1)"
asp-route-filtroAtual="@ViewData["filtroAtual"]"
class="btn btn-default @prevDisabled">
Anterior
</a>
<a asp-action="Index"
asp-route-ordem="@ViewData["ordemAtual"]"
asp-route-pagina="@(Model.PageIndex + 1)"
asp-route-filtroAtual="@ViewData["filtroAtual"]"
class="btn btn-default @nextDisabled">
Próximo
</a>
Execute o projeto, abra a página dos estudantes :
Clique nos links de paginação em ordens de classificação diferentes para garantir que a paginação esta funcionando. Em seguida, digite uma string de caracteres de pesquisa e tente a paginação novamente para verificar se a paginação também funciona corretamente com classificação e filtragem.
Na próxima parte do artigo vamos criar uma página para exibir estatísticas sobre os estudantes.
Pegue o projeto funcionando aqui : UniversidadeMacoratti.zip
"Se alguém quer vir após mim (Jesus), a si mesmo se negue, tome a sua cruz e siga-me" (Mateus 16:24).
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Entity Framework - Conceitos Básicos - Uma visão geral - Macoratti
Entity Framework - Separando as classes das entidades do ... - Macoratti
Entity Framework 6 - Aplicação em camadas - Definindo o ... - Macoratti
C# - Cadastro de Clientes com Entity Framework em ... - Macoratti
NET - Entity Framework 5 - Operações CRUD (revisitado) - Macoratti