C# MVC - Action Única para Inserir e Atualizar Registro

A ideia para esta postagem, surgiu quando em um grupo de discussão de C# no WhatsApp foi feita a pergunta:

Pessoal estou estudando o Asp.Net MVC e eu tenho um sistema de consorcio onde a tela de cadastro de Cota é bem complexa, o exemplo que vejo em MVC sempre tem uma tela de inclusão,alteração e exclusão. No meu caso uso uma que faz todo o processo. Como seria isto no MVC?

 

Basicamente todos os exemplos de CRUD, utilizam uma Action para inserir, outra para editar e outra para excluir.

A maioria das vezes, a Action para inserir e editar, possuem os mesmos campos e regras de negócio, gerando assim código duplicado e com maior manutenção.

Porém, se existir regras distintas para inserção e edição do registro, as regras podem ser criadas e validadas em BO (Business Objects, mas isto falarei em outro post).

Para reaproveitar a tela existe várias formas. Vou mostrar utilizando uma Action única para inserir e detalhar irei chamar ela de Cadastro.

Basicamente se ela receber um id na URL, irá buscar o registro e devolver para a View o registro.

A View não tem muito segredo (estou utilizando Razor).

No inicio da View verifico se foi passado um registro válido (diferente de nulo) e se este tem a propriedade PessoaID diferente de 0 (se for zero indica que estamos inserindo um registro).

Se as duas condições forem válidas, estamos fazendo a edição de um registro. Então será setando a variável novoRegistro para false.

Se a variável é false, adicionamos o identificador PK do registro, para que no POST o Entity Framework entenda que é a edição de um registro e não a criação de um novo registro.

Além disto, a variável novoRegistro é utilizada para o controle dos botões que irão aparecer para o usuário.

Para finalizar temos a Action do POST. Ela segue a mesma ideia utilizada na View, se a propriedade PessoaID estiver 0, indica uma inserção, senão será uma edição. Lembre-se estou usando Entity Framework.

Os fontes acima estão disponibilizados no meu GitHub em https://github.com/TiedtTech/TiedtTech.Artigos/tree/main/csharp-action-unica-para-inserir-e-atualizar-registro

Compartilhe
Dados do artigo
Publicado em 12/10/2020 09:13
Autor: Marlon Tiedt
Categorais: C# .Net Programação