Compartilhar via


Adicionar uma exibição (VB)

por Rick Anderson

Este tutorial ensinará os conceitos básicos da criação de um aplicativo Web MVC ASP.NET 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 VB.NET. Se você preferir C#, mude para a versão C# deste tutorial.

Nesta seção, vamos modificar a HelloWorldController classe para usar um arquivo de modelo de exibição para encapsular de forma limpa o processo de geração de respostas HTML para um cliente.

Vamos começar usando um modelo de exibição com o Index método na HelloWorldController classe. Atualmente, o Index método retorna uma string com uma mensagem codificada dentro da classe do controlador. Altere o Index método para retornar um View objeto, conforme mostrado a seguir:

Public Function Index() As ActionResult
            Return View()
        End Function

Vamos agora adicionar um modelo de exibição ao nosso projeto que podemos invocar com o Index método. Para fazer isso, clique com o botão direito do mouse dentro do Index método e clique em Adicionar Exibição.

IndexAddView

A caixa de diálogo Adicionar vista é exibida. Deixe as entradas padrão e clique no botão Adicionar .

3addView

A pasta MvcMovie\Views\HelloWorld e o arquivo MvcMovie\Views\HelloWorld\Index.vbhtml são criados. Você pode vê-los no Gerenciador de Soluções:

SolnExpHelloWorldIndx

Adicione um pouco de HTML sob a <h2> tag. O arquivo MvcMovie\Views\HelloWorld\Index.vbhtml modificado é mostrado abaixo.

@Code
    ViewData("Title") = "Index"
End Code

<h2>Index</h2>

<b>Hello</b> World!

Execute o aplicativo e navegue até o controlador "hello world" (http://localhost:xxxx/HelloWorld). O Index método em seu controlador não funcionou muito; ele simplesmente executou a instrução return View(), que indicava que queríamos usar um arquivo de modelo de exibição para renderizar uma resposta ao cliente. Como não especificamos explicitamente o nome do arquivo de modelo de exibição a ser usado, ASP.NET MVC usou como padrão o arquivo de exibição Index.vbhtml na pasta \Views\HelloWorld . A imagem abaixo mostra a cadeia de caracteres codificada na exibição.

3Olá Mundo

Parece muito bom. No entanto, observe que a barra de título do navegador diz "Índice" e o título grande na página diz "Meu aplicativo MVC". Vamos mudar isso.

Alterando exibições e páginas de layout

Primeiro, vamos alterar o texto "Meu aplicativo MVC". Esse texto é compartilhado e aparece em todas as páginas. Na verdade, ele aparece em apenas um lugar em nosso projeto, embora esteja em todas as páginas do nosso aplicativo. Vá para a pasta /Views/Shared no Gerenciador de Soluções e abra o arquivo _Layout.vbhtml . Esse arquivo é chamado de página de layout e é o "shell" compartilhado que todas as outras páginas usam.

Observe a @RenderBody() linha de código perto da parte inferior do arquivo. RenderBody é um espaço reservado onde todas as páginas que você cria aparecem, "embrulhadas" na página de layout. Altere o <h1> título de " Meu aplicativo MVC" para "Aplicativo de filme MVC".

<div id="title">
        <h1>MVC Movie App</h1>
  </div>

Execute o aplicativo e observe que agora ele diz "MVC Movie App". Clique no link Sobre e essa página também mostrará "MVC Movie App".

O arquivo _Layout.vbhtml completo é mostrado abaixo:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>@ViewData("Title")</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
</head>
<body>
    <div class="page">
        <header>
            <div id="title">
                <h1>MVC Movie App</h1>
            </div>
            <div id="logindisplay">
                @Html.Partial("_LogOnPartial")
            </div>
            <nav>
                <ul id="menu">
                    <li>@Html.ActionLink("Home", "Index", "HelloWorld")</li>
                    <li>@Html.ActionLink("About", "About", "Home")</li>
                </ul>
            </nav>
        </header>
        <section id="main">
            @RenderBody()
        </section>
        <footer>
        </footer>
    </div>
</body>
</html>

Agora, vamos alterar o título da página Índice (exibição).

@Code
    ViewData("Title") = "Movie List"
End Code

<h2>My Movie List</h2>

<p>Hello from our View Template!</p>

Abra MvcMovie\Views\HelloWorld\Index.vbhtml. Existem dois locais para fazer uma alteração: primeiro, o texto que aparece no título do navegador e, em seguida, no cabeçalho secundário (o <h2> elemento). Vamos torná-los um pouco diferentes para que você possa ver qual parte do código altera qual parte do aplicativo.

Execute o aplicativo e navegue atéhttp://localhost:xx/HelloWorld. Observe que o título do navegador, o cabeçalho primário e os títulos secundários foram alterados. É fácil fazer grandes alterações em seu aplicativo com pequenas alterações em uma exibição. (Se você não vir alterações no navegador, talvez esteja visualizando o conteúdo armazenado em cache. Pressione Ctrl+F5 no navegador para forçar o carregamento da resposta do servidor.)

3_MyMovieList

Nosso pequeno pedaço de "dados" (neste caso, a mensagem "Olá, Mundo!") é codificado, no entanto. Nosso aplicativo MVC tem V (visualizações) e temos C (controladores), mas nenhum M (modelo) ainda. Em breve, veremos como criar um banco de dados e recuperar dados de modelo dele.

Passando dados do controlador para a exibição

Antes de irmos para um banco de dados e falarmos sobre modelos, vamos primeiro falar sobre como passar informações do Controller para um View. Queremos passar o que um modelo de exibição requer para renderizar uma resposta HTML a um cliente. Esses objetos normalmente são criados e passados por uma classe de controlador para um modelo de exibição e devem conter apenas os dados que o modelo de exibição requer — e nada mais.

Anteriormente, com a HelloWorldController classe, o Welcome método de ação usava um name parâmetro e um numTimes e, em seguida, enviava os valores dos parâmetros para o navegador. Em vez de fazer com que o controlador continue a renderizar essa resposta diretamente, vamos colocar esses dados em um saco para o View. Controllers e Views podem usar um ViewBag objeto para armazenar esses dados. Isso será passado para um modelo de exibição automaticamente e usado para renderizar a resposta HTML usando o conteúdo do pacote como dados. Dessa forma, o controlador se preocupa com uma coisa e o modelo de exibição com outra — permitindo-nos manter uma "separação de interesses" limpa dentro do aplicativo.

Como alternativa, poderíamos definir uma classe personalizada e, em seguida, criar uma instância desse objeto por conta própria, preenchê-la com dados e passá-la para o View. Isso geralmente é chamado de ViewModel, porque é um modelo personalizado para o View. Para pequenas quantidades de dados, no entanto, o ViewBag funciona muito bem.

Retorne ao arquivo HelloWorldController.vb altere o Welcome método dentro do controlador para colocar o Message e o NumTimes no ViewBag. O ViewBag é um objeto dinâmico. Isso significa que você pode colocar o que quiser. O ViewBag não tem propriedades definidas até que você coloque algo dentro dele.

O completo HelloWorldController.vb com a nova classe no mesmo arquivo.

Namespace MvcMovie
    Public Class HelloWorldController
        Inherits System.Web.Mvc.Controller
        '
        ' GET: /HelloWorld

        Function Index() As ActionResult
            Return View()
        End Function

        Public Function Welcome(ByVal name As String, Optional ByVal numTimes As Integer = 1) As ActionResult
            ViewBag.Message = "Hello " & name
            ViewBag.NumTimes = numTimes
            Return View()
        End Function

    End Class
End Namespace

Agora nosso ViewBag contém dados que serão passados para o View automaticamente. Novamente, alternativamente, poderíamos ter passado nosso próprio objeto assim, se quiséssemos:

return View(myCustomObject)

Agora precisamos de um WelcomeView modelo! Execute o aplicativo para que o novo código seja compilado. Feche o navegador, clique com o botão direito do mouse dentro do Welcome método e clique em Adicionar Exibição.

Veja como é a caixa de diálogo Adicionar Exibição .

3Adicionar Bem-vindoExibir

Adicione o código a seguir sob o <h2> elemento no novo Welcome.vbhtml. Faremos um loop e diremos "Olá" quantas vezes o usuário disser que devemos!

@Code 
    For i As Integer = 0 To ViewBag.NumTimes
@<h3> @ViewBag.Message @i.ToString </h3>
     Next i
 End Code

Execute o aplicativo e navegue até http://localhost:xx/HelloWorld/Welcome?name=Scott&numtimes=4

Agora os dados são retirados da URL e passados para o controlador automaticamente. O controlador empacota os dados em um Model objeto e passa esse objeto para a exibição. A exibição exibe os dados como HTML para o usuário.

3Hello_Scott_4

Bem, isso foi um tipo de “M” de modelo, mas não o tipo de banco de dados. Vamos ver o que aprendemos e criar um banco de dados de filmes.