Acessar dados de seu modelo por meio de um controlador (VB)

por Rick Anderson

Este tutorial ensinará os conceitos básicos da criação de um aplicativo Web ASP.NET MVC usando o Microsoft Visual Web Developer 2010 Express Service Pack 1, que é uma versão gratuita do Microsoft Visual Studio. Antes de começar, verifique se você instalou os pré-requisitos listados abaixo. Você pode instalar todos eles clicando no seguinte link: Web Platform Installer. Como alternativa, você pode instalar individualmente os pré-requisitos usando os seguintes links:

Se você estiver usando o Visual Studio 2010 em vez do Visual Web Developer 2010, instale os pré-requisitos clicando no seguinte link: Pré-requisitos do Visual Studio 2010.

Um projeto do Visual Web Developer com VB.NET código-fonte está disponível para acompanhar este tópico. Baixe a versão do VB.NET. Se preferir C#, alterne para a versão C# deste tutorial.

Nesta seção, você criará uma nova MoviesController classe e escreverá um código que recupera os dados do filme e os exibe no navegador usando um modelo de exibição. Certifique-se de criar seu aplicativo antes de continuar.

Clique com o botão direito do mouse na pasta Controladores e crie um novo MoviesController controlador. Selecione as seguintes opções:

  • Nome do controlador: MoviesController. (Esse é o padrão.)
  • Modelo: controlador com ações de leitura/gravação e exibições, usando o Entity Framework.
  • Classe de modelo: Filme (MvcMovie.Models).
  • Classe de contexto de dados: MovieDBContext (MvcMovie.Models).
  • Exibições: Razor (CSHTML). (O padrão.)

5addMovieController

Clique em Adicionar. O Visual Web Developer cria os seguintes arquivos e pastas:

  • Um arquivo MoviesController.vb na pasta Controladores do projeto.
  • Uma pasta Filmes na pasta Exibições do projeto.
  • Create.vbhtml, Delete.vbhtml, Details.vbhtml, Edit.vbhtml e Index.vbhtml na nova pasta Views\Movies .

5_ScaffoldMovie

O mecanismo de scaffolding do ASP.NET MVC 3 criou automaticamente os métodos e exibições de ação CRUD (criar, ler, atualizar e excluir) para você. Agora você tem um aplicativo Web totalmente funcional que permite criar, listar, editar e excluir entradas de filme.

Execute o aplicativo e navegue até o Movies controlador acrescentando /Movies à URL na barra de endereços do navegador. Como o aplicativo depende do roteamento padrão (definido no arquivo Global.asax ), a solicitação http://localhost:xxxxx/Movies do navegador é roteada para o método de ação padrão Index do Movies controlador. Em outras palavras, a solicitação http://localhost:xxxxx/Movies do navegador é efetivamente a mesma que a solicitação http://localhost:xxxxx/Movies/Indexdo navegador. O resultado é uma lista vazia de filmes, porque você ainda não adicionou nenhum.

Captura de tela que mostra a página Minha Lista de Filmes no Aplicativo de Filme M V C.

Criando um filme

Selecione o link Criar Novo. Insira alguns detalhes sobre um filme e clique no botão Criar .

Captura de tela que mostra a página Criar no Aplicativo de Filme M V C.

Clicar no botão Criar faz com que o formulário seja postado no servidor, onde as informações do filme são salvas no banco de dados. Em seguida, você será redirecionado para a URL /Movies , na qual poderá ver o filme recém-criado na listagem.

IndexWhenHarryMet

Crie duas mais entradas de filme adicionais. Experimente os links Editar, Detalhes e Excluir, que estão todos funcionais.

Examinando o código gerado

Abra o arquivo Controllers\MoviesController.vb e examine o método gerado Index . Uma parte do controlador de filme com o Index método é mostrada abaixo.

Public Class MoviesController
        Inherits System.Web.Mvc.Controller

        Private db As MovieDBContext = New MovieDBContext

        '
        ' GET: /Movies/

        Function Index() As ViewResult
            Return View(db.Movies.ToList())
        End Function

A linha a seguir da MoviesController classe cria uma instância de um contexto de banco de dados de filme, conforme descrito anteriormente. Você pode usar o contexto do banco de dados de filmes para consultar, editar e excluir filmes.

Private db As MovieDBContext = New MovieDBContex

Uma solicitação para o Movies controlador retorna todas as entradas na tabela do banco de dados de filme e, em Movies seguida, passa os resultados para a exibição Index .

Modelos fortemente tipado e a @model palavra-chave

Anteriormente neste tutorial, você viu como um controlador pode passar dados ou objetos para um modelo de exibição usando o ViewBag objeto . O ViewBag é um objeto dinâmico que fornece uma maneira conveniente de passar informações para uma exibição.

ASP.NET MVC também fornece a capacidade de passar dados ou objetos fortemente tipdos para um modelo de exibição. Essa abordagem fortemente tipada permite uma melhor verificação em tempo de compilação do seu código e do IntelliSense mais avançado no editor do Visual Web Developer. Estamos usando essa abordagem com a classe e o MoviesController modelo de exibição Index.vbhtml .

Observe como o código cria um List objeto quando chama o View método auxiliar no método de Index ação. Em seguida, o código passa essa Movies lista do controlador para a exibição:

Function Index() As ViewResult
            Return View(db.Movies.ToList())
       End Function

Ao incluir uma @ModelType instrução na parte superior do arquivo de modelo de exibição, você pode especificar o tipo de objeto esperado pela exibição. Quando você criou o controlador de filme, o Visual Web Developer incluiu automaticamente a seguinte @model instrução na parte superior do arquivo Index.vbhtml :

@ModelType IEnumerable(Of MvcMovie.Movie)

Essa @ModelType diretiva permite que você acesse a lista de filmes que o controlador passou para a exibição usando um Model objeto fortemente tipado. Por exemplo, no modelo Index.vbhtml , o código percorre os filmes fazendo uma foreach instrução sobre o objeto fortemente tipado Model :

@For Each item In Model
    Dim currentItem = item
    @<tr>
        <td>
            @Html.DisplayFor(Function(modelItem) currentItem.Title)
        </td>
        <td>
            @Html.DisplayFor(Function(modelItem) currentItem.ReleaseDate)
        </td>
        <td>
            @Html.DisplayFor(Function(modelItem) currentItem.Genre)
        </td>
        <td>
            @Html.DisplayFor(Function(modelItem) currentItem.Price)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", New With {.id = currentItem.ID}) |
            @Html.ActionLink("Details", "Details", New With {.id = currentItem.ID}) |
            @Html.ActionLink("Delete", "Delete", New With {.id = currentItem.ID})
        </td>
    </tr>
Next

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

5_Intellisense

Trabalhando com SQL Server Compact

Entity Framework Code Primeiro detectou que a cadeia de conexão de banco de dados fornecida apontou para um Movies banco de dados que ainda não existia, portanto, o Code First criou o banco de dados automaticamente. Você pode verificar se ele foi criado examinando a pasta App_Data . Se você não vir o arquivo Movies.sdf, clique no botão Mostrar Todos os Arquivos na barra de ferramentas Gerenciador de Soluções, clique no botão Atualizar e expanda a pasta App_Data.

SDF_in_SolnExp

Clique duas vezes em Movies.sdf para abrir o Explorer do Servidor. Em seguida, expanda a pasta Tabelas para ver as tabelas que foram criadas no banco de dados.

Observação

Se você receber um erro ao clicar duas vezes em Movies.sdf, verifique se instalou as Ferramentas do Visual Studio 2010 SP1 para SQL Server Compact 4.0. (Para obter links para o software, consulte a lista de pré-requisitos na parte 1 desta série de tutoriais.) Se você instalar a versão agora, precisará fechar e reabrir o Visual Web Developer.

DB_explorer

Há duas tabelas, uma para o Movie conjunto de entidades e, em seguida, para a EdmMetadata tabela. A EdmMetadata tabela é usada pelo Entity Framework para determinar quando o modelo e o banco de dados estão fora de sincronia.

Clique com o botão direito do mouse na Movies tabela e selecione Mostrar Dados da Tabela para ver os dados que você criou.

MoviesTable

Clique com o botão direito do mouse na Movies tabela e selecione Editar Esquema de Tabela.

EditTableSchema

TableSchemaSM

Observe como o esquema da Movies tabela é mapeado para a Movie classe que você criou anteriormente. Entity Framework Code Primeiro criou automaticamente esse esquema para você com base em sua Movie classe.

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

Closeconnection

Agora você tem o banco de dados e uma página de listagem simples para exibir o conteúdo dele. No próximo tutorial, examinaremos o restante do código scaffolded e adicionaremos um SearchIndex método e uma SearchIndex exibição que permitem pesquisar filmes neste banco de dados.