Neste artigo veremos realizar um CRUD básico usando o micro ORM Dapper e o padrão Repository em uma aplicação ASP .NET Core Razor Page. |
Continuando a primeira parte do artigo vamos criar as páginas Razor Pages do nosso projeto.
Vamos criar uma pasta chamada Produto dentro da pasta Pages do projeto e nesta pasta vamos incluir as views que iremos usar.
Vamos inicir criando a página para exibir uma lista de produtos.
1- Criando a Razor Page para exibir uma lista de produtos
Clique com o botão do mouse sobre a pasta Produto e a seguir clique em Add-> Razor Page;
Na janela Add Scaffold selecione Razor Page e clique em Add;
A seguir em Add Razor Page informe o nome Index, marque as opções conforme abaixo e clique no botão Add;
Serão criados na pasta Produto os arquivos Index.cshtml e seu code-behind Index.cshtml.cs.
Primeiro abra o arquivo code-behind Index.cshtml.cs e defina o código abaixo neste arquivo:
Por convenção, a classe
PageModel é chamada <PageName>Model, no
exemplo: <Index>Model, e está no mesmo namespace
da página.
A classe PageModel permite a separação da lógica
de uma página de sua apresentação. Ela define
manipuladores de página para requisições enviadas para a
página e os dados usados para renderizar a página.
(Esta separação permite gerir dependências de páginas
através da injeção de dependência e testar as páginas.)
Observe que no arquivo Index.cshtml.cs a classe IndexModel possui o método OnGet() que é o método padrão para operação GET. No código retornamos uma lista de produtos que será executado assim que a página form aberta.
Realizamos a injeção de dependência injetando uma instância do nosso repositório para poder usar os métodos definidos e realizar as operações CRUD.
Observe que as propriedades listaProduto e produto utilizam o atributo [BindProperty] para ativar o model binding. O Model Binding, que já conhecemos do MVC, também funciona com a Razor Pages. Assim como os métodos Actions dos Controllers MVC, temos na Razor Pages os Handlers.
Usamos os Handlers ou manipuladores como métodos para lidar com solicitações HTTP (GET, POST, PUT, DELETE ...)
A página possui um método
OnPostDelete, que é executado em requisições
POST. Você pode adicionar métodos de manipulador para
qualquer verbo HTTP.
O código em OnPostDelete é semelhante ao que você
normalmente escreveria em um controlador. Aqui
verificamos se o id é maior que zero e invocamos o
método Delete() passando o id do produto.
Após o produto ser excluido com sucesso, o método do
manipulador chama o método helper redirectToPage
para retornar uma instância de RedirectToPageResult.
Aqui, RedirectToPage é um novo action result, semelhante ao RedirectToAction ou RedirectToRoute, mas personalizado para páginas. No código estamos redirecionando para a página Index da pasta Produto (/Produto/Index).
Agora vamos definir a nossa View no arquivo Index.cshtml usando o código a seguir:
@page
@model AspnCrudDapper.Pages.Produto.IndexModel
@{
ViewData["Title"] = "Produtos";
}
<script>
function macFunction(x) {
$("#item_view").modal();
};
$(document).ready(function () {
$("#success-alert").hide();
$("#success-alert").fadeTo(2000, 500).slideUp(500, function () {
$("#success-alert").slideUp(500);
});
});
</script>
<div class="container">
<div class="mail-box">
<aside class="lg-side">
<div class="inbox-head">
<h3>Produtos</h3>
</div>
<a class="btn btn-primary btn-sx pull-left" style="margin-top:20px;margin-bottom: 20px;"
asp-page="/Produto/Add">
<i class="glyphicon glyphicon-plus"></i> Adicionar Novo Produto
</a>
<br />
@{
if (!string.IsNullOrEmpty(Model.Message))
{
<div class="alert alert-success" id="success-alert" style="margin-top: 40px;">
<button type="button" class="close" data-dismiss="alert">x</button>
<strong>@Model.Message ! </strong>
</div>
}
}
<div class="inbox-body" style="margin-top:20px;">
<div class="mail-option">
<table class="table table-inbox table-hover" style="border:2px solid black;">
<thead>
<tr class="unread">
<th class="col-sm-2 view-message dont-show">ID</th>
<th class="view-message col-sm-3">NOME</th>
<th class="col-sm-2">ESTOQUE</th>
<th class="view-message text-left col-sm-2">PREÇO</th>
<th class="col-sm-1">Comando</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.listaProdutos)
{
<tr>
<td onclick="macFunction(this)" class="view-message dont-show">
<h5>@item.ProdutoId</h5></td>
<td onclick="macFunction(this)" class="view-message">
<h5>@item.Nome</h5></td>
<td onclick="macFunction(this)"><h4 style="margin-top: 5px;">
<span class="label label-success ">@item.Estoque</span></h4></td>
<td onclick="macFunction(this)" class="view-message text-left">
<h5>@string.Format("{0:C}", @item.Preco)</h5></td>
<td>
<form method="post">
<span class="btn-group pull-right" style="margin-top: 5px">
<a class="btn btn-warning btn-xs" asp-page="/Produto/Edit"
asp-route-id="@item.ProdutoId" style="background-color: blueviolet; height: 29px; margin-top: -1px;">
<i class="glyphicon glyphicon-edit"></i>
</a>
<button type="submit" class="btn btn-danger btn-xs" asp-page-handler="Delete"
asp-route-id="@item.ProdutoId" style="height: 27px; margin-top: 0px;"
onclick="return confirm('Deseja realmente excluir este produto?');">
<i class="glyphicon glyphicon-remove"></i>
</button>
</span>
</form>
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</aside>
</div>
</div>
|
Após fazer um ajuste na página _Layout.cshtml e na página Index.cshtml da pasta Pages ao executar o projeto neste momento iremos obter:
1- A página incial do projeto
2- Clicando no link Produtos veremos a lista de produtos que definimos nos arquivos Index.cshtml e Index.cshtml.cs da pasta Produto:
Podemos já excluir um produto clicando no ícone respectivo ao produto e obteremos a mensagem para confirmar ou não a exclusão do produto:
Na próxima parte do artigo vamos continuar a criar as demais páginas Razor Pages.
"Jesus respondeu: Na verdade,
na verdade te digo que aquele que não nascer da água e
do Espírito, não pode entrar no reino de Deus."
João 3:5
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 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
ASP .NET Core - Criando uma aplicação com Angular 2 - Macoratti.net
ASP .NET Core - Criando uma aplicação Web no ... - Macoratti.net
ASP .NET Core - Iniciando com ASP .NET Core MVC e ... - Macoratti
ASP .NET Core - Implementando a segurança com ... - Macoratti
ADO .NET - Usando o Micro ORM Dapper - Macoratti
C# - CRUD no SQL Server com Dapper e MetroFramework ... - Macoratti
ASP .NET - Apresentando a sintaxe Razor - Macoratti
ASP .NET Core - Apresentando Razor Pages - Macoratti