Compartir a través de


Agregar una vista (VB)

por Rick Anderson

Este tutorial le enseñará los conceptos básicos de la creación de una aplicación web de ASP.NET MVC mediante Microsoft Visual Web Developer 2010 Express Service Pack 1, que es una versión gratuita de Microsoft Visual Studio. Antes de empezar, asegúrese de que ha instalado los requisitos previos que se enumeran a continuación. Para instalar todos ellos, haga clic en el vínculo siguiente: Instalador de plataforma web. Como alternativa, puede instalar individualmente los requisitos previos mediante los vínculos siguientes:

Si usa Visual Studio 2010 en lugar de Visual Web Developer 2010, instale los requisitos previos haciendo clic en el vínculo siguiente: Requisitos previos de Visual Studio 2010.

Un proyecto de Visual Web Developer con código fuente VB.NET está disponible para acompañar este tema. Descargue la versión de VB.NET. Si prefiere C#, cambie a la versión de C# de este tutorial.

En esta sección, modificará la clase HelloWorldController para usar un archivo de plantilla de vista con el objetivo de encapsular correctamente el proceso de generar respuestas HTML a un cliente.

Comencemos usando una plantilla de vista con el método Index de la clase HelloWorldController. Actualmente, el método Index devuelve una cadena con un mensaje que está codificado de forma rígida en la clase de controlador. Cambie el método Index para devolver un objeto View, como se muestra a continuación:

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

Ahora vamos a agregar una plantilla de vista a nuestro proyecto que podemos invocar con el método Index. Para ello, haga clic con el botón derecho en el método Index y haga clic en Agregar vista.

IndexAddView

Aparece el cuadro de diálogo Agregar vista. Deje las entradas predeterminadas y haga clic en el botón Agregar.

3addView

Se crean la carpeta MvcMovie\Views\HelloWorld y el archivo MvcMovie\Views\HelloWorld\Index.vbhtml. Puede verlos en el Explorador de soluciones:

SolnExpHelloWorldIndx

Agregue código HTML bajo la etiqueta <h2>. A continuación se muestra el archivo MvcMovie\Views\HelloWorld\Index.vbhtml modificado.

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

<h2>Index</h2>

<b>Hello</b> World!

Ejecute la aplicación y vaya al controlador "hola mundo" (http://localhost:xxxx/HelloWorld). El método Index del controlador no hizo mucho; simplemente ejecutó la instrucción return View(), lo que indica que queríamos usar un archivo de plantilla de vista para representar una respuesta al cliente. Como no hemos especificado expresamente el nombre del archivo de plantilla de vista que se debe usar, ASP.NET MVC usó de manera predeterminada el archivo de vista Index.vbhtml de la carpeta \Views\HelloWorld. En la imagen siguiente se muestra la cadena codificada de forma rígida en la vista.

3HelloWorld

Tiene buena pinta. Pero observe que en la barra de título del explorador se muestra "Índice" y en el título grande en la página aparece "Mi aplicación MVC". Vamos a cambiarlo.

Cambiar vistas y páginas de diseño

En primer lugar, vamos a cambiar el texto "Mi aplicación MVC". Ese texto se comparte y aparece en cada página. Realmente aparece en un solo lugar de nuestro proyecto, aunque se encuentra en cada página de nuestra aplicación. Vaya a la carpeta /Views/Shared en el Explorador de soluciones y abra el archivo _Layout.vbhtml. Este archivo se denomina página de diseño y es el "shell" compartido que usan todas las demás páginas.

Tenga en cuenta la línea de código @RenderBody() cerca de la parte inferior del archivo. RenderBody es un marcador de posición donde todas las páginas que crea se muestran, "encapsuladas" en la página de diseño. Cambie el encabezado <h1> de " Mi aplicación MVC" a "Aplicación de películas MVC".

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

Ejecute la aplicación y observe que ahora dice "MVC Movie App". Haga clic en el vínculo Acerca de y esa página también muestra "MVC Movie App".

A continuación se muestra el archivo _Layout.vbhtml completo:

<!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>

Ahora cambiará el título de la página Index (vista).

@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. Hay dos lugares en los que realizar un cambio: en primer lugar, el texto que aparece en el título del explorador y, a continuación, en el encabezado secundario (el elemento <h2>). Haremos que sean algo diferentes para que pueda ver qué parte del código cambia cada área de la aplicación.

Ejecute la aplicación y vaya a http://localhost:xx/HelloWorld. Tenga en cuenta que el título del explorador, el encabezado principal y los encabezados secundarios han cambiado. Es fácil realizar grandes cambios en la aplicación con pequeños cambios en una vista. (Si no ve los cambios en el explorador, es posible que esté viendo contenido almacenado en caché. Presione Ctrl+F5 en el explorador para forzar que se cargue la respuesta del servidor).

3_MyMovieList

Sin embargo, nuestro poco de "datos" (en este caso, el mensaje "Hola mundo") estaba codificado de forma rígida. Nuestra aplicación MVC tiene V (vistas) y tenemos C (controladores), pero aún no hay M (modelo). En breve, veremos cómo crear una base de datos y recuperar los datos del modelo de ella.

Pasar datos del controlador a la vista

Antes de ir a una base de datos y hablar de los modelos, vamos a hablar primero sobre cómo pasar información del controlador a una vista. Queremos pasar lo que requiere una plantilla de vista para representar una respuesta HTML a un cliente. Normalmente, estos objetos se crean y pasan mediante una clase de controlador a una plantilla de vista, y solo deben contener los datos que requiere la plantilla de vista y nada más.

Anteriormente con la clase HelloWorldController, el método de acción Welcome tomaba una name y un parámetro numTimes y, a continuación, generaba los valores de parámetro en el explorador. En lugar de que el controlador siga representando esta respuesta directamente, vamos a colocar esos datos en un contenedor para la vista. Los controladores y vistas pueden usar un objeto ViewBag para contener esos datos. Esto se pasará automáticamente a una plantilla de vista y se usará para representar la respuesta HTML mediante el contenido del contenedor como datos. De este modo, el controlador se preocupa por una cosa y la plantilla de vista con otra, lo que nos permite mantener una clara "separación sin preocupaciones" dentro de la aplicación.

Como alternativa, podríamos definir una clase personalizada y, a continuación, crear una instancia de ese objeto por nuestra cuenta, rellenarla con datos y pasarla a la Vista. A menudo se denomina ViewModel, porque es un modelo personalizado para la vista. Sin embargo, para pequeñas cantidades de datos, ViewBag funciona bien.

Vuelva al archivo HelloWorldController.vb cambie el método Welcome dentro del controlador para colocar Message y NumTimes en ViewBag. ViewBag es un objeto dinámico. Eso significa que puede poner lo que quiera. ViewBag no tiene propiedades definidas hasta que se coloca algo dentro de él.

El elemento completo HelloWorldController.vb con la nueva clase en el mismo archivo.

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

Ahora, ViewBag contiene datos que se pasarán automáticamente a la vista. De nuevo, como alternativa, podríamos haber pasado nuestro propio objeto como este si nos hubiera gustado:

return View(myCustomObject)

¡Ahora necesitamos una plantilla WelcomeView! Ejecute la aplicación para que se compile el nuevo código. Cierre el explorador, haga clic con el botón derecho en el método Welcome y, a continuación, haga clic en Agregar vista.

Este es el aspecto del cuadro de diálogo Agregar vista.

3AddWelcomeView

Agregue el código siguiente en el elemento <h2> en el nuevo archivo Welcome.vbhtml. ¡Haremos un bucle y diremos "Hola" tantas veces como el usuario nos lo pida

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

Ejecute la aplicación y vaya a http://localhost:xx/HelloWorld/Welcome?name=Scott&numtimes=4

Ahora los datos se toman de la dirección URL y se pasan al controlador automáticamente. El controlador empaqueta los datos en un objeto Model y pasa ese objeto a la vista. A continuación, la vista muestra los datos como HTML al usuario.

3Hello_Scott_4

Bueno, todo esto era un tipo de "M" para el modelo, pero no el tipo de base de datos. Vamos a aprovechar lo que hemos aprendido para crear una base de datos de películas.