¿Cuál es la diferencia entre ViewData y ViewBag?

Resuelto user469652 asked hace 13 años • 17 respuestas

Lo vi ViewBagen MVC 3. ¿En qué se diferencia de ViewDataMVC 2?

user469652 avatar Jan 16 '11 19:01 user469652
Aceptado

Utiliza la característica dinámica de C# 4.0. Logra el mismo objetivo que viewdata y debe evitarse en favor del uso de modelos de vista fuertemente tipados (de la misma manera que se debe evitar viewdata).

Básicamente reemplaza las cuerdas mágicas :

ViewData["Foo"]

con propiedades mágicas :

ViewBag.Foo

para lo cual no tiene seguridad en el tiempo de compilación.

Sigo culpando a Microsoft por introducir este concepto en MVC.

El nombre de las propiedades distingue entre mayúsculas y minúsculas.

Darin Dimitrov avatar Jan 16 '2011 12:01 Darin Dimitrov

Internamente, las propiedades de ViewBag se almacenan como pares de nombre/valor en el diccionario ViewData .

Nota: en la mayoría de las versiones preliminares de MVC 3, la propiedad ViewBag se denominó ViewModel como se indica en este fragmento de las notas de la versión de MVC 3:

(editado el 8 de octubre de 2012) Se sugirió que publicara la fuente de esta información que publiqué, aquí está la fuente: http://www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4

Los controladores MVC 2 admiten una propiedad ViewData que le permite pasar datos a una plantilla de vista utilizando una API de diccionario de enlace tardío. En MVC 3, también puedes usar una sintaxis algo más simple con la propiedad ViewBag para lograr el mismo propósito. Por ejemplo, en lugar de escribir ViewData["Message"]="text", puedes escribir ViewBag.Message="text". No es necesario definir ninguna clase fuertemente tipada para utilizar la propiedad ViewBag. Debido a que es una propiedad dinámica, puede simplemente obtener o establecer propiedades y las resolverá dinámicamente en tiempo de ejecución. Internamente, las propiedades de ViewBag se almacenan como pares de nombre/valor en el diccionario ViewData. (Nota: en la mayoría de las versiones preliminares de MVC 3, la propiedad ViewBag se denominó propiedad ViewModel).

Rich Bianco avatar May 16 '2011 20:05 Rich Bianco

ViewBag frente a ViewData en MVC

http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html

Similitudes entre ViewBag y ViewData:

Ayuda a mantener los datos cuando pasa del controlador a la vista. Se utiliza para pasar datos del controlador a la vista correspondiente. La vida corta significa que el valor se vuelve nulo cuando se produce la redirección. Esto se debe a que su objetivo es proporcionar una forma de comunicación entre controladores y vistas. Es un mecanismo de comunicación dentro de la llamada al servidor.

Diferencia entre ViewBag y ViewData:

ViewData es un diccionario de objetos que se deriva de la clase ViewDataDictionary y al que se puede acceder mediante cadenas como claves. ViewBag es una propiedad dinámica que aprovecha las nuevas características dinámicas de C# 4.0. ViewData requiere encasillamiento para tipos de datos complejos y verificar valores nulos para evitar errores. ViewBag no requiere encasillamiento para tipos de datos complejos.

Ejemplo de ViewBag y ViewData:

public ActionResult Index()
{   
    ViewBag.Name = "Arun Prakash";   
    return View();
}

public ActionResult Index()
{  
    ViewData["Name"] = "Arun Prakash";  
    return View();
}   

Llamando en vista

@ViewBag.Name    
@ViewData["Name"]
Arun Prakash avatar Nov 08 '2013 17:11 Arun Prakash