Razor Pages ASPNET Core CRUD Básico
A continuação mediante o tutorial de configuração de Razor Pages em um projeto em branco, é a abordagem de um cadastro básico, ou seja, CRUD
(Create, Read, Update and Delete) em um determinada tabela do seu banco de dados.
A idéia central é mostrar que cada página terá a sua responsabilidade, uma de mostra a lista de credito, outra para cadastrar novo credito, outra para visualizar e editar o registro de credito e por fim excluir o credito com esse novo template de desenvolvimento para Web
.
Com a explicação anterior, tem pasta com o nome de Pages
para colocar as páginas, então, crie uma pasta Admim
e dentro uma pasta Credito
como demostrado na figura logo abaixo:
Bom nesse momento vou configurar com esse tutorial Entity Framework Core 2 a tabela Credits
do meu Banco de dados DatabaseRazorPages
:
e as classes que farão parte do modelo lógico e configuração Entity Framework Core 2 na pasta Models
:
Para que funcione a injeção de dependência da classe criada Database
acrescente duas linhas no arquivo Startup.cs
no método ConfigureServices
:
services.AddEntityFrameworkSqlServer();
services.AddDbContext<Database>();
Nota: também foi configurado a geração de rotas com os nomes tudo em minusculo, particularmente gosta da estética e mantem um padrão:
services.AddRouting
—options.LowercaseUrls = true
Próximo passo é voltar a pasta Pages/Admin/Credito
e criar a primeira página para que a rota seja carregada sem problemas, ou seja, admin/credito
segue a nomenclatura de rotas pela pasta criada e isso é um fator importante a ser observado e consequentemente a primeira página dessa pasta deve ser Index
(que é o padrão) e após a sua criação abra o seu arquivo de programação Index.cshtml.cs
que recebera a seguinte programação:
Sendo que foi injetado a classe Database
no construtor (nota: todas as classes desse exemplo é injetado a classe Database
que é a Framework de persistência Entity Framework Core 2
para a manipulação de dados) no método OnGet
passar os dados obtidos na consulta para um propriedade public
criada para receber esses valores (public IEnumerable<Credit> Credits
), porque, na parte do html
da página o Razor
precisa identificar as propriedades pelo modelo enviado para gerar a página com todas as informações da tabela Credits
.
Logo no código abaixo tem o exemplo de obtenção dessa lista que é Model.Credits
e com essa enumeração de resultados preencher a tabela com os dados de cada item, exemplo:
A segunda página é aCreate
que tem a sua responsabilidade criar registros para a tabela Credits
e após a criação da página o seu código de programação:
observe que agora além da injeção normal que acontece em todos Razor Pages
desse tutorial agora temos dois métodos OnGet
que é o que carrega a página e OnPost
que é responsável em ser executado após clicar no botão submit
de um <form method="post">
, após o preenchimento do formulário é enviado as informações e esse método fica responsável em salvar as informações enviadas.
Tem também um recurso de que ao decorar um propriedade com a classe BindProperty
e ao submeter esse formulário essa propriedade será carregada com as informações do referente formulário e pode ser utilizada para as operações de CRUD
. e a página Create.cshtml
:
A próxima página é Edit.cshtml
que tem como razão principal editar os registro já inseridos na base no seu código o métodoOnGet
tem um parâmetro inteiro (que pode ser null
) com o nomeid
que recupera o código e carrega a propriedade public Credit Credit
.
O métodoOnPost
tem a função de atualizar o registro com a novas informações que foram carregadas na propriedade public Credit Credit
e salvar as alterações na base.
A página é bem parecida com Create.cshtml
mas, tem um item um input
hidden
que carrega o id
que é a identificação do registro:
Um página de detalhes como exemplo de exibição de informação de um registro na base, criado com o nome de Details.cshtml
no seu método OnGet
tem um paramento igual da página Edit.cshtml
e a funcionalidade bem parecida para o carregamento da informação:
Na página Details.cshtml
foi exibida a informação e com 3 links oferecendo o redirecionamento para editar, excluir o registro e voltar a página inicial:
O último exemplo é a pagina Delete
que tem a funcionalidade de excluir um registro da base, é bem parecida com a Edit
mas, o que muda realmente é o método utilizado para excluir o registro pela camada de persistência:
e a página referente ao código:
O layout final das pastas e seus arquivos:
A rotas padrão que permite o acesso a essas páginas são:
admin/credito
admin/credito/index
admin/create
admin/edit/{id}
admin/details/{id}
admin/delete/{id}
e vale uma explicação que o padrão dos parâmetros das rotas é QueryString
, mas, com adição nas páginas da configuração: @page "{id:int?}"
isso garante um padrão igual ao MVC
tradicional que em vez de ser assim: admin/edit?id=1
ficam admin/edit/1
.
Esse tutorial é também básico, mas, as funcionalidades são bem parecida com o MVC
tradicional, muda em certos aspecto como fazer, mas, a ideia central é que funcionem da mesma maneira e tragam o mesmo resultados.
Um outro ponto importante é que a geração dessas página já exite o seu gerador (que com um CRUD
na camada de persistência gera todas as páginas) e funciona perfeitamente, mas, algumas configurações que estão nesse tutorial como por exemplo das rotas é o programador quem faz.
As imagens representam cada funcionalidade, observe: