Iniciando com ASP.Net MVC (Parte 5)


Acessando seus dados do modelo de um Controller


Neste tutorial, você criará uma nova classe MoviesController e escreverá o código que recupera o dado do filme e exibe no navegador utilizando um modelo view. Você precisa executar os tutoriais anteriores antes de prosseguir.

Clique com o botão direito na pasta Controllers e crie um novo controller MoviesController. Selecione as seguintes opções:
  • Nome do controller: MoviesController. (Este é padrão.)
  • Template: Controller with read/write actions and views, using Entity Framework.
  • Classe model: Movie (MvcMovie.Models).
  • Classe de contexto de dados: MovieDBContext (MvcMovie.Models).
  • Views Razor (CSHTML). (Padrão)

AddScaffoldedMovieController

Clique em Add. Visual Web Developer cria os seguintes arquivos e pastas:
  • Um arquivo MoviesController.cs na pasta do projeto Controllers.
  • Uma pasta Movies na pasta do projeto Views.
  • Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml e Index.cshtml na nova pasta Views/Movies.
NewMovieControllerScreenShot

A estrutura do mecanismo do ASP.NET MVC 3 cria automaticamente as operações CRUD (create, read, update e delete) nos métodos de ações e view. Você agora tem uma completa e funcional aplicação web que permite que você crie, liste, edite e exclua os dados do filme.


Execute a aplicação e navegue para o controller Movies adicionando na URL /Movies na barra de endereços do seu browser. Como o aplicativo tem o redirecionamento padrão (definido no arquivo Global.asax), o navegador invoca a URL http://localhost:xxxx/Movies que é roteada para o método padrão Index  do controller Movies. Em outras palavras, o navegador invoca http://localhost:xxxx/Movies que é efetivamente a mesma coisa que o browser invocar http://localhost:xxxx/Movies/Index. O resultado é uma lista vazia de filmes, porque você ainda não adicionou nenhum.




Criando um Filme

Selecione o link Create New. Digite alguns detalhes sobre o filme e então clique no botão Create.


Clicando no botão Create faz com que o form seja enviado para o servidor, onde a informação do filme é salva no banco de dados. Você então será redirecionado para a URL /Movies, onde você pode ver o novo filme criado na lista.

IndexWhenHarryMet

Crie mais algumas entradas de filmes. Tente usar os links Edit, Details e Delete, os quais estão todos funcionando.

Examinando o Código em Geral

Abra o arquivo Controller\MoviesController.cs e examine o método gerado Index. Uma parte da classe controller com o método Index é mostrada abaixo:

public class MoviesController : Controller
{
    private MovieDBContext db = new MovieDBContext();

    //
    // GET: /Movies/

    public ViewResult Index()
    {
        return View(db.Movies.ToList());
    }
A seguinte linha da classe MoviesController instancia um objeto de contexto do banco de dados, como descrito anteriormente. Você pode usar o filme do contexto do banco de dados para consultar, editar e excluir os filmes.



private MovieDBContext db = new MovieDBContext();
Anteriormente neste tutorial, você viu como um controller pode passar dados ou objetos para um modelo view usando o objeto ViewBag. O ViewBag é um objeto dinâmico que prove uma conveniente maneira tardia para passar informações para uma view.


ASP.NET MVC também pode fornecer a capacidade para passar dados ou objetos fortemente tipados para uma view. Este tipo forte aproxima a melhor habilidade em tempo de compilação checando o seu código e um IntelliSense mais rico no editor Visual Web Developer. Nós estamos utilizando está aproximação com a classe MoviesController e a view Index.cshtml.


Note como o código cria um objeto List quando ele invoca na View o método de ação Index. O código então passa está lista de filmes do controller para a view.



public ViewResult Index()
{
    return View(db.Movies.ToList());
}

Pela inclusão @model de uma declaração no topo do arquivo view, você pode espicificar o tipo de objeto que o view espera. Quando você criou o controller movie, o Visual Web Developer automaticamente incluiu a declaração @model no início do arquivo Index.cshtml:

@model IEnumerable<MvcMovie.Models.Movie> 
Esta @model diretiva permite você acessar a lista de filmes que o controller passa para a view pelo uso de um objeto Model que é fortemente tipado. Por exemplo, no arquivo Index.cshtml, o código percorre a lista através do comando foreach sobre o objeto fortemente tipado Model.



@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Title)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ReleaseDate)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Genre)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Price)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ID })
        </td>
    </tr>
}

Por causa que o objeto Model é fortemente tipado (como um objeto  IEnumerable<Movie>), cada objeto item no loop é tipado como um Movie. Entre outros benefícios, isto significa que você tem em tempo de compilação a checagem do código e suporte completo do IntelliSense no editor de código:


ModelIntellisene


Trabalhando com SQL Server Compact

Entity Framework Code First detecta que a string de conexão do banco de dados que foi fornecida apontando para o banco de dados Movies que não existe ainda, assim a codificação cria o banco de dados automaticamente. Você pode verificar que ele é criado olhando na pasta App_Data. Se você não viu o arquivo Movies.sdf, clique em no botão Show All Files na barra do Solution Explorer, clique no botão Refresh, e então expanda a pasta App_Data.


SDF_in_SolnExp


Dê um duplo clique em Movies.sdf para abrir o Server Explorer. Então expanda a pasta Tables para exibir as tabelas que foi criada no banco de dados.


Observação: Se aparecer um erro quando você der um duplo clique em  Movies.sdf, tenha certeza que você instalou o  SQL Server Compact 4.0. Se você instalou uma nova versão agora, reinicie o Visual Web Developer.


DB_explorer

Existem duas tabelas, uma para a definição de Movie e a tabela EdmMetadata. A tabela EdmMetadata é usada pelo Entity Framework para determinar quando o modelo e o banco de dados não estão sincronizados.


Dê um duplo clique na tabela  Movies e selecione Show Table Data para exibir os dados que você criou.


MoviesTable


Dê um duplo clique na tabela Movies e selecione a opção Edit Table Schema.


EditTableSchema


TableSchemaSM



Observe como o schema da tabela Movie mapeia para a classe Movie que você criou anteriormente. Entity Framework Code First cria automaticamente este schema para você baseado na sua classe Movie.


Quando você terminar, feche a conexão. (Se você não fechar a conexão, você poderá receber um erro na próxima vez que executar o seu projeto).


CloseConnection

Agora você tem um banco de dados e uma listagem simples para a exibição deste conteúdo. No próximo capítulo, nós iremos examinar o resto da estrutura do código e adicionar um método e uma view SearchIndex que irá buscar o filme no banco de dados.

6 comentários:

  1. Putz.. muito bom seu tutorial! Pena que não tenha dado sequencia! =/

    ResponderExcluir
    Respostas
    1. Obrigado pelo feedback, infelizmente não tenho tido muito tempo de escrever novos tutoriais.

      Excluir
  2. Cara, ta de Parabens com este Tutorial

    ResponderExcluir
  3. Muito bom o seu tutorial, esperando pelas próximas postagem.

    ResponderExcluir
  4. Muito boa as suas explicações meu camarada! Espero que vc tenha mais tempo para dar continuidade no seu tutorial. Grande abraço!!!

    ResponderExcluir