Vi el ViewBag
en MVC 3. ¿Cómo es eso diferente que ViewData
en MVC 2?
.net
asp.net-mvc-3
difference
viewbag
viewdata
usuario469652
fuente
fuente
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 denominaba ViewModel como se indica en este fragmento de las notas de la versión de MVC 3:
(editado 10-8-12) Se sugirió que publique la fuente de esta información que publiqué, aquí está la fuente: http://www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4
fuente
ViewData
yViewBag
, no sobreViewModel
.dynamic
y apoyaViewBag.Message
. Uno usa laViewData["Message"]
sintaxis anterior.ViewBag vs ViewData en MVC
http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html
Similitudes entre ViewBag y ViewData:
Diferencia entre ViewBag y ViewData:
ViewBag & ViewData Ejemplo:
Llamando a la vista
fuente
typecasting
pero no mostró cómo se realiza la conversión de textoViewData
: Requiere conversión de tipos para tipos de datos complejos y verificaciones de valores nulos para evitar errores.ViewBag
: No requiere conversión de tipos para tipos de datos complejos.Considere el siguiente ejemplo:
Y el código para
View
es el siguiente:fuente
<h4>@ViewBag.emp.Name</h4>
debería cambiar a<h4>@ViewBag.Employee.Name</h4>
Todas las respuestas sugieren que
ViewBag
y / oViewData
es pasar datosController
a losViews
que hay información errónea. ambos son muy útiles para pasar datos de Vistas a Diseño o Parciales a Vistas (o ViewComponents, etc.) No es exclusivo del controlador.como muestra de asp.net predeterminada, tenga esto en la página de diseño:
y en cualquier vista
Entonces, para hacer la pregunta: "¿cuál es la diferencia entre
ViewBag
yViewData
?"La diferencia más notable es que
ViewData
es un diccionario fuertemente tipado, mientras queViewBag
es un tipo dinámico.Tenga en cuenta que los datos dentro ES LO MISMO
¿Cuándo usar uno u otro?
ViewBag
no admite nombres de C # no válidos. no puedes accederViewData["Key With Space"]
conViewBag
ViewBag.Something
es dinámico y puede tener problemas al llamar a métodos (como los métodos de extensión) que necesitan conocer el parámetro exacto en el momento de la compilación.ViewBag
puede verificar si hay limpiadores sintácticos nulos:ViewBag.Person?.Name
ViewData
tiene todas las propiedades de un diccionario comoContainsKey
,Add
etc., por lo que puede usarlo,ViewData.Add("somekey", "somevalue")
tenga en cuenta que puede generar excepciones.ViewData
en vistas necesita TypeCasting mientrasViewBag
que no.Conocer las diferencias sutiles, usar uno u otro es mucho más una preferencia de sabor.
Normalmente puedes pensar
ViewBag.AnyKey
en un alias deViewData["AnyKey"]
fuente
¿Puedo recomendarle que tampoco lo use?
Si desea "enviar" datos a su pantalla, envíe un objeto fuertemente tipado (AKA ViewModel) porque es más fácil de probar.
Si se une a algún tipo de "Modelo" y tiene elementos aleatorios de "viewbag" o "viewdata", entonces las pruebas automatizadas son muy difíciles.
Si está utilizando estos, considere cómo podría reestructurar y simplemente use ViewModels.
fuente
Hay algunas diferencias sutiles que significan que puede usar ViewData y ViewBag de maneras ligeramente diferentes de la vista. Una ventaja se describe en esta publicación http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx y muestra que el casting se puede evitar en el ejemplo usando ViewBag en lugar de ViewData.
fuente
viewdata: es un diccionario que se usa para almacenar datos entre View y el controlador, debe convertir el objeto de datos de vista en su modelo correspondiente en la vista para poder recuperar datos de él ...
ViewBag: es una propiedad dinámica similar en su funcionamiento a los datos de la vista, sin embargo, es mejor porque no necesita ser convertida en su modelo de corressponding antes de usarla en la vista ...
fuente
A continuación se muestra la diferencia punto a punto sobre ViewData, ViewBag, TempData y Session. Crédito / copiado askforprogram.in , siga el enlace para el ejemplo de código que no he mencionado aquí.
ViewData en MVC
ViewBag en MVC
TempData en MVC
Sesión en MVC
fuente
Aunque es posible que no tenga una ventaja técnica para elegir un formato sobre el otro, debe tener en cuenta algunas diferencias importantes entre las dos sintaxis. Una diferencia obvia es que ViewBag funciona solo cuando la clave a la que está accediendo es un identificador de C # válido. Por ejemplo, si coloca un valor en ViewData ["Clave con espacios"], no puede acceder a ese valor usando ViewBag porque el código no se compilará. Otra cuestión clave a tener en cuenta es que no puede pasar valores dinámicos como parámetros a los métodos de extensión. El compilador de C # debe conocer el tipo real de cada parámetro en tiempo de compilación para elegir el método de extensión correcto. Si algún parámetro es dinámico, la compilación fallará. Por ejemplo, este código siempre fallará: @ Html.TextBox ("nombre", ViewBag.Name). Para evitar esto, use ViewData ["Nombre"
fuente
fuente
De esta manera podemos hacer que use los valores para pasar la información entre el controlador a otra página con TEMP DATA
fuente
Una diferencia principal que noté entre ViewData y ViewBag es:
ViewData: devolverá el objeto, no importa lo que haya asignado a esto y necesite volver a escribir al tipo original.
ViewBag: es lo suficientemente inteligente como para devolver el tipo exacto de lo que le ha asignado, no importa el tiempo que haya asignado el tipo simple (es decir, int, cadena, etc.) o el tipo complejo.
Ej: código del controlador.
Ver código.
Pantalla de salida.
fuente
Ver datos
http://www.gurujipoint.com/2017/09/view-data-viewbag-and-tempdata.html
fuente
- ViewData se utiliza para pasar datos del controlador para ver
- Se deriva de la clase ViewDataDictionary
- Está disponible solo para la solicitud actual
- Requiere conversión de texto para tipos de datos complejos y verifica valores nulos para evitar errores
- Si se produce la redirección, su valor se vuelve nulo
ViewBagfuente
Aquí ViewData y ViewBag tanto son datos pase usado de Controlador de Vista .
1. ViewData
- ViewData es un objeto de diccionario que se deriva de la clase ViewDataDictonary .
- Los datos solo permiten una solicitud, los valores de ViewData se borran cuando se produce el redireccionamiento de la página.
- El valor de ViewData debe escribirse cate antes de su uso.
Ejemplo: en el controlador
En vista
- Con ViewData hay un par como Key y Value , Message es Key y en coma invertido el valor es Value.
- Los datos son simples, por lo que no podemos usar la conversión de tipos aquí si los datos son complejos y luego usar la conversión de tipos.
- En View los datos se pueden extraer como
2. ViewBag
- ViewBag usa la característica dinámica. Contenedor ViewBag alrededor de ViewData.
- En ViewBag se requiere el tipo de conversión.
- Igual que ViewData, si se produce la redirección, el valor se vuelve nulo.
Ejemplo:
En vista
--Para tipos complejos use ViewBag
- En View los datos se pueden extraer como
- la principal diferencia es que ViewBag no requiere conversión de texto, pero ViewData requiere conversión de texto.
fuente
ViewBag y ViewData son dos medios que se utilizan para pasar información del controlador para ver en ASP.Net MVC. El objetivo de utilizar ambos mecanismos es proporcionar la comunicación entre el controlador y la Vista. Ambos tienen una vida corta, es decir, el valor de ambos se vuelve nulo una vez que se ha producido la redirección, es decir, una vez que la página ha redirigido desde la página de origen (donde establecemos el valor de ViewBag o ViewData) a la página de destino, tanto ViewBag como ViewData se vuelve nulo.
A pesar de tener estas similitudes, ambos (ViewBag y ViewData) son dos cosas diferentes si hablamos de la implementación de ambos. Las diferencias son las siguientes:
1.) Si analizamos ambos aspectos de implementación, encontraremos que ViewData es una estructura de datos de diccionario: Diccionario de objetos derivados de ViewDataDictionary y accesible mediante cadenas como claves para estos valores, mientras que ViewBag utiliza las características dinámicas introducidas en C # 4.0 y Es una propiedad dinámica.
2.) Al acceder a los valores de ViewData, debemos escribir los valores (tipos de datos) ya que se almacenan como Objetos en el diccionario ViewData, pero no es necesario si accedemos al valor en el caso de ViewBag.
3.) En ViewBag podemos establecer el valor de esta manera:
y puede acceder de la siguiente manera:
Mientras que en el caso de ViewData, los valores se pueden establecer y acceder de la siguiente manera: Configuración de ViewData de la siguiente manera:
y acceder a un valor como este
Para más detalles haga clic aquí:
fuente