domingo, 18 de enero de 2015

Post 7. Intercambio de Datos en MVC - Valores desde controlador hacia la vista (I)

En el post anterior mostramos como obtener datos desde la url hacia el controlador, en esta ocasión mostraremos como enviar datos desde el controlador hacia la vista.

Esto nos sirve por ejemplo, cuando desde el controlador accedemos a base de datos y obtenemos una listado de clientes y obviamente deseamos mostrar estos datos en una grilla de nuestra vista.

Pues para enviar datos desde el controlador hacia nuestra vista existe dos maneras:

Enviar datos a la vista a través de ViewData y ViewBag

A pesar de que son dos formas de enviar datos en realidad son lo mismo y lo mostraremos mas adelante.

Utilizando el ejemplo del post anterior mostraremos los valores de las variables marca y modelo dentro de nuestra vista, en primer lugar utilizaremos ViewData y lo hacemos de la siguiente manera:
public class CatalogoController : Controller {
     public ActionResult Smartphones(String marca, String modelo)
    {
       ViewData["Marca"] = marca;
       ViewData["Modelo"] = modelo;
        return View();
    }
 }

Una vez colocados los valores a nuestros ViewData podemos acceder a su valor desde la vista de la siguiente manera:
<!DOCTYPE html>
<html>
<head>
    <title>
Smartphones</title>
</head>
<body>
Marca: @ViewData["Marca"]<br />
Modelo: @ViewData["Modelo"]
</body>
</html>


Ahora mostraremos los mismos datos pero utilizando ViewBag:
public class CatalogoController : Controller {
     public ActionResult Smartphones(String marca, String modelo)
    {
       ViewBag.Marca = marca;
       ViewBag.Modelo = modelo;
        return View();
    }
 }

<!DOCTYPE html>
<html>
<head>
    <title>
Smartphones</title>
</head>
<body>
Prueba usando ViewBag:<br />
Marca: @ViewBag.Marca<br />
Modelo: @ViewBag.Modelo
</body>
</html>


Vemos que el resultado es el mismo que si usáramos un ViewData. Ahora modificaremos la vista para mostrar los datos utilizando ViewData pero no modificaremos el ViewBag del controlador, ejecutemos y veamos que es lo que pasa:
public class CatalogoController : Controller {
    public ActionResult Smartphones(String marca, String modelo)
    {
       ViewData["Marca"] = marca;
       ViewData["Modelo"] = modelo;
        return View();
    }
 }

<!DOCTYPE html>
<html>
<head>
    <title>
Smartphones</title>
</head>
<body>
Prueba usando ViewData en el controlador y ViewBag en la vista:<br />
Marca: @ViewBag.Marca<br />
Modelo: @ViewBag.Modelo
</body>
</html>


Podemos ver que aunque utilicemos ViewBag en el controlador y ViewData en la vista, nuestra variables se muestran sin problema (usarlo en viceversa también funciona), por ello podemos decir que ambas opciones son una sola (no son realmente lo mismo pero podemos usar cualquiera de las dos y funcionarán igual).

En el siguiente post veremos otra forma de enviar los datos del controlador hacia la vista usando modelos.

Recuerden que pueden descargar las fuentes de este post aquí

0 comentarios :

Publicar un comentario

Contactos

Post Populares

123.Net

123.Net

Vistas a la página totales

Con tecnología de Blogger.