3.3. Vistas en ASP .NET MVC - G
3.3. Vistas en ASP .NET MVC - G
Guillermo Rivera
INTRODUCCIÓN.
Los desarrolladores invierten mucho tiempo enfocándose en creación de controladores y modelos
de objetos bien hechos y por una buena razón, porque el código limpio y bien escrito en estas áreas
forma la base de una aplicación web sostenible.
Pero cuando un usuario visita la aplicación web en un navegador, nada de este trabajo es visible. La
primera impresión e interacción del usuario con la aplicación empieza con la vista. Por tanto, la vista
es efectivamente el primer embajador de la aplicación ante el usuario.
Evidentemente si el resto de la aplicación tiene errores no hay cantidad de palabras ni maquillaje
que compense esas deficiencias. De la misma manera, construir una vista poco atractiva y difícil de
usar provoca que los usuarios no le den a la aplicación la posibilidad de demostrar la riqueza de
características y que se encuentre libre de errores.
La vista es responsable de proporcionar la interface de usuario. Después que el controlador ha
ejecutado la lógica apropiara para la URL solicitada, delega la presentación a la vista. A diferencia
de frameworks basados en archivos (como ASP.NET y PHP), las vistas no son directamente
accesibles: no se puede decir al navegador que vaya a una vista y obtenerla. En lugar de eso, una
vista es siempre generada por un controlador, el cual proporciona los datos que la vista mostrará.
En algunos casos sencillos la vista necesita poca o ninguna información del controlador. Más a
menudo, el controlador necesita proporcionar alguna información a la vista, por lo que le pasa un
objeto de transferencia de datos llamado el modelo. La vista transforma el modelo en un formato
listo para ser presentado al usuario. En ASP.NET MVC, la vista logra esto examinando el objeto
modelo entregado por el controlador y transforma el contenido en HTML.
Nota: No todas las vistas producen HTML. HTML es ciertamente el caso más común cuando se
construye aplicaciones web. Pero las vistas también pueden producir una amplia variedad de
otros tipos de contenido.
1 de 14
Programación II Ing. Guillermo Rivera
Una vista es un documento HTML o XHTML estándar que puede contener scripts, los cuales se usan
para agregar contenido dinámico a la vista.
Construya un proyecto ASP.NET MVC vacío de nombre MVCPaises, en el cual se mostrará un listado
de países.
1. En el menú de Visual Studio .NET seleccione las opciones Archivo, Nuevo, Proyecto.
2. En el menú de la parte izquierda de la pantalla y dentro de la opción C#, seleccione Web.
3. En la parte superior de la pantalla seleccione la opción .NET Framework 4.5.
4. Seleccione la opción ASP.NET Web Application, coloque el nombre MVCPaises.
5. Presione el botón OK.
6. Seleccione la plantilla Empty (ver la ventana New ASP.NET Project).
7. Marque la casilla MVC (ver la ventana New ASP.NET Project).
8. Presione el botón OK.
Observe que en la ventana Solution Explorer aparecen las carpetas Models, Views y Controllers, y
algunos otros elementos básicos, tal como se muestra en la ventana Solution Explorer.
El sitio web recién creado está totalmente vacío, y si intenta ejecutarlo obtendrá la siguiente
pantalla de error:
2 de 14
Programación II Ing. Guillermo Rivera
Haga clic derecho sobre la carpeta Controllers y seleccione la opción Add, Controller…, tal como se
muestra en la figura siguiente:
3 de 14
Programación II Ing. Guillermo Rivera
Observe que se agrega un controlador con el nombre HomeController, con el código siguiente:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVCPaises.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
}
}
}
También observe que se ha creado una subcarpeta de nombre Home dentro de la carpeta Views.
Sin embargo, la aplicación web no puede ser ejecutada aún porque hace falta la correspondiente
vista asociada al controlador Index(). Si intenta ejecutar la aplicación obtendrá el error siguiente:
4 de 14
Programación II Ing. Guillermo Rivera
namespace MVCPaises.Controllers
{
public class HomeController : Controller
{
// GET: Home
public string Index()
{
return "Aplicación MVC";
}
}
}
Sin embargo, trabajar de esta manera resulta ilógico porque no se aprovecha la potencia del modelo
MVC y se limita a presentar contenido sencillo, como texto. Para demostrar esto, modifique al
controlador HomeController para que su código sea similar al mostrado:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVCPaises.Controllers
{
public class HomeController : Controller
{
public List<string> Index()
{
return new List<string>()
{
"Belice",
"Guatemala",
"El Salvador",
"Honduras",
"Nicaragua",
"Costa Rica",
"Panamá"
};
}
}
}
5 de 14
Programación II Ing. Guillermo Rivera
namespace MVCPaises.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
ViewBag.Paises = new List<string>()
{
"Belice",
"Guatemala",
"El Salvador",
"Honduras",
"Nicaragua",
"Costa Rica",
"Panamá"
};
return View();
}
}
}
6 de 14
Programación II Ing. Guillermo Rivera
2. Agregue una vista al proyecto MVC, que esté relacionada con el controlador
HomeController. Para ello haga clic derecho sobre el nombre del método de acción Index,
tal como se muestra:
3. Desactive la casilla Use a layout page (ver Ventana Add view) y presione el botón Add. Con
esto se acepta la convención estándar que consiste en usar el mismo nombre del método
de acción en la vista.
Observe que la ventana Solution Explorer ahora muestra una vista asociada al controlador, como
se muestra en la figura siguiente:
7 de 14
Programación II Ing. Guillermo Rivera
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
</div>
</body>
</html>
NOTA: Si ejecuta la aplicación web mostrará una página web sin contenido.
5. Abra la vista relacionada con el método de acción Index() del control HomeController y
sustituya el código anterior con el código siguiente:
@{
ViewBag.Title = "Listado de países";
}
<h2>Listado de países</h2>
<ul>
@foreach (string pais in ViewBag.Paises)
{
<li>pais</li>
}
</ul>
Ejecute la aplicación. Ahora se espera obtener el listado de países, sin embargo se obtiene lo
siguiente:
8 de 14
Programación II Ing. Guillermo Rivera
<h2>Listado de países</h2>
<ul>
@foreach (string pais in ViewBag.Paises)
{
<li>@pais</li>
}
</ul>
ViewBag
Controlador Vista
ViewData
ViewData es un diccionario de objetos que son almacenados y recuperados usando cadenas como
claves. La sintaxis de ambos objetos es:
ViewBag.PropiedadDinámica = "UnValor";
ViewData["UnaClave"] = "UnValor";
ViewBag usa la característica dinámica que fue introducida a C# 4: permite a un objeto tener
propiedades dinámicamente agregadas a él.
9 de 14
Programación II Ing. Guillermo Rivera
Tanto ViewData como ViewBag no proporcionan revisión de errores en tiempo de compilación. Por
ejemplo, si se escribe mal el nombre de la clave o de la propiedad no se obtendría ningún mensaje
de error y se sabría del error hasta el tiempo de ejecución.
Internamente las propiedades de ViewBag son almacenadas como pares clave/valor en el
diccionario ViewData.
Al analizar el código del controlador ahora se tienen dos escenarios:
public ActionResult Index()
public ActionResult Index()
{
{
ViewData["Paises"] = new
ViewBag.Paises = new List<string>()
List<string>()
{
{
"Belice",
"Belice",
"Guatemala",
"Guatemala",
"El Salvador",
"El Salvador",
"Honduras",
"Honduras",
"Nicaragua",
"Nicaragua",
"Costa Rica",
"Costa Rica",
"Panamá"
"Panamá"
};
};
return View();
return View();
}
}
Código del controlador usando ViewBag Código del controlador usando ViewData
10 de 14
Programación II Ing. Guillermo Rivera
Expresiones de código.
El carácter clave de transición en Razor es el signo arroba (@). Este único carácter es usado para
hacer la transición entre el lenguaje de marcación y el código, e incluso a veces también para hacer
una transición inversa. Los dos tipos básicos de transiciones son expresiones de código y bloques de
código. Las expresiones son evaluadas y escritas en la respuesta.
Por ejemplo, en el siguiente fragmento:
<h1>Listing @items.Length items.</h1>
Razor sabe que el carácter de espacio después de la expresión no es un identificador válido, por lo
que realiza una suave transición de vuelta hacia el lenguaje de marcación.
Observe que el carácter después de la expresión de código @item es un carácter de código válido,
por lo cual Razor revisa el carácter siguiente y encuentra un paréntesis angular que no es un carácter
válido y automáticamente hace una transición a lenguaje de marcación.
Esta habilidad de hacer transiciones automáticas entre código C# y lenguaje de marcación es uno
de los mayores recursos de Razor para mantener la sintaxis compacta y limpia.
Sintaxis de Razor.
Las principales reglas de sintaxis para Razor con C# son las siguientes:
Los bloques de código Razor se encuentran encerrados con @{ ... }.
Las expresiones inline (variables y funciones) inician con @.
Las sentencias de código terminan con punto y coma.
11 de 14
Programación II Ing. Guillermo Rivera
body {
margin-top: 0px;
margin-bottom: 0px;
}
2. Incluya el archivo design.css en el proyecto. Para ello haga clic derecho y agregue una
carpeta nueva de nombre Content.
3. Haga clic derecho sobre la carpeta y seleccione la opción Add, Existing Item…, tal como se
muestra:
12 de 14
Programación II Ing. Guillermo Rivera
4. Seleccione el archivo design.css que acaba de crear. Ahora el archivo es parte del proyecto
web MVC, como se muestra en la ventana Solution Explorer y el contenido en la pantalla
central.
NOTA: A partir de este momento, cualquier cambio en el código del archivo design.css se
hace directamente en la ventana que se muestra.
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Países de Centroamérica</title>
<link rel="stylesheet" href="~/Content/design.css">
</head>
<body>
<div>
<h2>Listado de países</h2>
<ul>
@foreach (string pais in ViewBag.Paises)
{
<li>@pais</li>
}
</ul>
</div>
</body>
</html>
13 de 14
Programación II Ing. Guillermo Rivera
NOTA: Gran parte de este material ha sido tomado de los videos publicados por Kud Venkat de
Pragim Technologies, Marathalli, Bangalore, India. Puede encontrar los videos originales en la
direción URL siguiente:
http://csharp-video-tutorials.blogspot.com/p/aspnet-mvc-tutorial-for-beginners.html
14 de 14