ASP .NET MVC 2.0 - Criando uma aplicação MVC básica (C#) - 3
Na segunda parte deste artigo definimos as Actions Details e Create e suas respectivas Views . Para encerrar vamos definir as Actions Edit e Delete.
Lembre-se que no arquivo ContatoController.cs , exibido abaixo, temos as Actions : Index, Details, Create, Edit e Delete;
Os métodos Index, Details, Create,
Edit e Delete já foram criados mas faltam ser implementados. É o que vamos fazer, definir cada um destes métodos e em seguida criar o View para cada um deles. Observe que os métodos Create, Edit e Delete possuem duas formas sobrecarregadas um para o GET e outro para o POST.
|
Vemos a seguir um resumo das Actions existentes na aplicação que deveremos definir:
- Index() –
Action padrão do controller usada para exibir e listar itens;
(já definida)
· Details(id) – Esta action exibe
detalhes particular de um item;(já definida)
· Create() - Action que exibe um formulário
para criar um novo item;(já definida)
· Create(collection) – Action que inclui
o novo item no banco de dados;(já definida)
· Edit(id) –
Esta action exibe um formulário para editar um item
existente;
· Edit(id, collection) -
Acion que atualizar um item existente no banco de
dados;
- Delete() - Action que exibe um formulário com
o item a ser deletado;
- Delete(id, collection) - Action que
exclui um item existente do banco de dados;
Agora ao trabalho...
Definindo a Action Edit
Vamos continuar definindo a Action Edit do nosso Controller ContatoController.
Lembrando que a Action Edit é realizada em duas etapas : GET e POST.
Na primeira etapa, o GET, vamos localizar o contato a ser editado e exibir os dados na página;
Na segunda etapa, o POST, vamos submeter as alterações feitas nos dados e usando os recursos do Entity Framework realizar persistência no banco de dados.
Na janela Solution Explorer selecione o arquivo ContatoController na pasta Controller e inclua o código conforme indicado na primeira Action Result Edit;
O código obtém retorna uma entidade contato obtida pela consulta LINQ que recebe o id como parâmetro.
Nesta consulta LINQ estamos usando o operador First que retorna o primeiro elemento da seqüência que satisfaz o critério definido na expressão lambda;
Vamos criar a View para exibir os detalhes do contato para edição clicando com o botão direito do mouse sobre o método Edit e selecionando a opção Add View do menu suspenso. Será aberta a janela onde vamos definir os seguintes itens:
Após isso clique no botão Add;
Será cria o arquivo Edit.aspx na pasta Contato que será mapeada como : Contato/Edit/id onde o id representa o código do contato.
Veja abaixo a exibição da página com os dados de um contato selecionado:
Lembre que as classes da camada View são responsáveis por encapsular a lógica da apresentação e não contém código com regras de negócio nem com acesso a dados.
Todos os
métodos Action precisam retornar uma instância de uma classe derivada
da classe ActionResult. A classe ActionResult é a base para
processar o resultado gerado pelos métodos Action, e, existem
diferentes tipos de resultados possíveis, dependendo da ação que um método
Action irá gerar. A ação mais comum é a chamada ao método View; este método retorna uma instância da classe ViewResult a qual é derivada de ActionResult. Obs: Um método Action precisa retornar um dos seguintes action helpers como um valor de retorno: View, Redirect, RedirectToAction, RedirectToRoute, Content, ou Json. Logo temos os seguintes tipos de resultados possíveis existentes:
|
Vamos criar agora a segunda parte da Action Edit , o POST. Na janela Solution Explorer selecione o arquivo ContatoController na pasta Controller e inclua o código conforme indicado na primeira Action Result Edit;
No código notamos que estamos passando como parâmetro um objeto do tipo Contato (oContato).
A seguir obtemos o objeto original do banco de dados pois o que temos exibido na página ainda não foi persistido no banco de dados;
Verificamos se não há nenhum erro e para podermos persistir esta informação na entidade usamos o método ApplyCurrentValues();
O método ApplyCurrentValues(key.EntitySetName,TEntity) aplica as alterações feita na entidade no objeto original obtido do banco de dados.
Este método é usado para aplicar as mudanças que foram feitas a objetos fora do ObjectContext, tais como um objeto desanexado (detached) que são recebidos por um web service. (Você pode usar o EntityKey do objeto detached para retornar uma instância deste objeto a partir da fonte de dados.)
Após isso usamos o método SaveChanges() do contexto para persistir as alterações nas entidades e replicar no banco de dados.
Se
você tiver um objeto com os valores atuais e desejar aplicar os valores
originais chame o método ApplyOriginalValues. Você pode também usar o método ApplyCurrentValues do ObjectStateEntry para alterar o estado de uma entidade. |
Termos uma única View que já foi criada anteriormente e que se comportará diferente conforme o método for GET ou POST.
Vamos então alterar os valores exibidos na página para o contato de id igual a 2 na primeira parte do Edit , o GET, conforme a figura abaixo:
Clicando no botão Save a página será submetida realizando a segunda parte do Edit , o POST. Neste momento se não houver nenhum erro as informações serão persistidas no banco de dados e exibidas na página Index da pasta Contato que foi criada na primeira parte deste artigo.
Definindo a Action Delete
Prosseguindo vamos definir a Action Delete que nos permitirá excluir um contato existente.
Para definir a Action Delete temos que escrever dois métodos distintos para tratar esta ação:
1-) O primeiro irá exibir na view os dados do contato selecionado pelo código (id); representa o GET;
2-) O segundo irá tratar a postagem da página submetendo a entidade para exclusão usando os recursos do Entity Framework; representa o POST;
Na primeira parte da implementação, o GET, estamos passando o id do contato e usando uma consulta LINQ para obter a primeira entidade contato com o id informado;
O segundo método (POST) a Action recebe uma entidade do tipo Contato e obtém o contato a ser excluído da base de dados usando uma consulta LINQ:
// obtem o contato a excluirEm seguida usa o método DeleteObject(contato) para excluir o contato e o método SaveChanges para persistir no banco de dados a exclusão.
// excluirO código completo pode ser visto na figura abaixo:
Para criar a View correspondente clique com o botão direito sobre a Action Delete e selecione Add View;
A seguir defina os parâmetros conforme a janela a seguir;
O arquivo Delete.aspx será criado na pasta Contato.
Executando o projeto e selecionando o contato de id =2 para ser excluído veremos a primeira parte do Action Delete, a GET, exibir as informações do contato e solicitar a confirmação:
Clicando no botão Delete a segunda parte da Action Delete, o POST, ira submeter a página e usando os recursos do Entity Framework excluí-lo e retornado a página Index.aspx da pasta Contato, onde veremos que o contato foi excluído provando que os dados foram persistidos no banco de dados;
Com isso concluímos a criação de todas as Actions e Views para o nosso controller ContatoController e temos desta forma a realização das operações básicas de manutenção de dados em uma aplicação ASP .NET MVC.
Pegue o projeto completo aqui: Contatos_MVC2.zip
Eu sei é apenas ASP .NET MVC, mas eu gosto...
Referências:
José Carlos Macoratti