ViewBag en ASP.NET MVC 3

Las versiones 1 y 2 de ASP.NET MVC permitían el paso de datos desde el Controlador a la Vista a través del diccionario ViewData, de la siguiente forma:

Uso de ViewData en el Controlador

Y ya desde la vista, podíamos recuperar el valor así:

Uso del ViewData desde la Vista

ASP.NET MVC 3 sigue manteniendo este comportamiento, pero ha añadido un mecanismo adicional para facilitar esta tarea: el ViewBag. Se trata de un objeto dinámico disponible tanto en los controladores como en las vistas, sobre el que podemos ir definiendo propiedades sin necesidad de que éstas estén definidas previamente:

Uso del ViewBag desde el Controlador

Y desde la vista podríamos acceder a ellas de forma directa:

Uso del ViewBag desde la vista

A la vista de los ejemplos, podría parecer que ViewBag y ViewData son dos “sacos” diferentes para pasar información desde la capa Controlador a la capa Vista. Sin embargo, aunque bajo distintas denominaciones, están en realidad accediendo al mismo conjunto de datos. Por ejemplo, el siguiente código resultaría equivalente al anterior:

ViewBag y ViewData

Probablemente os preguntaréis qué aporta el nuevo ViewBag sobre el tradicional ViewData. Desde mi punto de vista son varias:

  • en primer lugar, permite un código más compacto y rápido de escribir,
  • elimina las temidas magic strings propias del diccionario ViewData,
  • como consecuencia, podríamos beneficiarnos (aunque de momento no he visto que sea así) de refactorizaciones o intellisense sobre estos miembros,
  • facilita el cambio de tipos. Los elementos de ViewData son siempre de tipo object, por lo que a veces debemos hacerles un cast para poder operar con ellos; las propiedades dinámicas del ViewBag se crean con el tipo apropiado, facilitanto así su manipulación posterior:

Acceso tipado a las propiedades del ViewBag

En definitiva, una nueva característica que ya podemos utilizar en MVC 3 (aunque hasta la RC2 bajo otra denominación, “ViewModel” en Controladores y “View” en vistas).
Personalmente no me aporta demasiado, pues sigo prefiriendo el uso de vistas con tipado fuerte, pero bueno, está bien saber que existe por si nos puede ser útil en algún momento.
Publicado en: Variable not found.

2 comentarios en “ViewBag en ASP.NET MVC 3”

  1. Aoy nuevo en MVC, pero cuando dice vistas de tipado fuerte se refiere a un tipo de objeto?,
    Cuando se necesitan datos de diferentes tipos de entidad como se debe hacer con tipado fuerte?

  2. Hola!

    Si quieres que una vista tipada incluya objetos de distintos tipos, puedes recurrir al patrón conocido como ViewModel.

    Esto significa, en la práctica, usar composición: si desde el controlador quieres enviar a la vista un objeto A y otro B usando tipado fuerte, basta con crear una clase C con dos propiedades, una de tipo A y otra B. Lo que pasarías a la vista es el objeto de tipo C, desde el cual se podría acceder a A y B.

    Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *