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:

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

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:

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

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:

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:

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.