¿Cómo funcionan los MVC de ASP.NET ViewBag
? MSDN dice que es sólo un Object
, lo que me intriga, ¿cómo funcionan realmente las propiedades "mágicas" como ViewBag.Foo
las cuerdas mágicas ViewBag["Hello"]
?
Además, ¿cómo puedo hacer uno y usarlo en mi aplicación ASP.NET WebForms?
¡Los ejemplos serían muy apreciados!
asp.net
asp.net-mvc
viewbag
Aniket Inge
fuente
fuente
Respuestas:
ViewBag
es de tipodynamic
pero, internamente es unSystem.Dynamic.ExpandoObject()
Se declara así:
dynamic ViewBag = new System.Dynamic.ExpandoObject();
por eso puedes hacer:
ViewBag.Foo = "Bar";
Ejemplo de código de objeto de expansor:
fuente
public object ViewBag { get; }
en la página de MSDN para ViewBag , pero estoy comprando su afirmación de que es unExpandoObject
. Me gusta la comparación con ViewData aquí : " Así que básicamente [ViewBag] reemplaza cadenas mágicas [en ViewData] ... con propiedades mágicas ". ; ^)public object ViewBag { get; }
en MSDN, el código dicedynamic ViewBag { get ..
que internamente es del tipo DynamicViewDataEs un objeto dinámico, lo que significa que puede agregarle propiedades en el controlador y leerlas más tarde en la vista, porque esencialmente está creando el objeto como lo hace, una característica del tipo dinámico. Consulte este artículo de MSDN sobre dinámica. Consulte este artículo sobre su uso en relación con MVC.
Si desea usar esto para formularios web, agregue una propiedad dinámica a una clase de página base así:
Haz que todas tus páginas hereden de esto. Debería poder, en su marcado ASP.NET, hacer:
Eso debería funcionar. Si no es así, hay formas de solucionarlo.
fuente
El
ViewBag
esSystem.Dynamic.ExpandoObject
como se sugiere. Las propiedades en elViewBag
son esencialmenteKeyValue
pares, donde se accede al valor mediante la clave. En este sentido estos son equivalentes:fuente
ViewBag se utiliza para pasar datos de Controller Action a la vista para representar los datos que se pasan. Ahora puede pasar datos entre Controller Action y View, ya sea usando ViewBag o ViewData. ViewBag: Es un tipo de objeto dinámico, eso significa que puede agregar nuevos campos a viewbag dinámicamente y acceder a estos campos en la Vista. Necesita inicializar el objeto de viewbag al momento de crear nuevos campos.
por ejemplo: 1. Creando ViewBag: ViewBag.FirstName = "John";
fuente
ViewBag es de tipo dinámico. Más, no puedes hacer
ViewBag["Foo"]
. Obtendrá una excepción: no se puede aplicar la indexación con [] a una expresión de tipo 'System.Dynamic.DynamicObject' .La implementación interna de
ViewBag
realmente almacena Foo enViewData["Foo"]
(tipo de ViewDataDictionary), por lo que esos 2 son intercambiables.ViewData["Foo"]
yViewBag.Foo
.Y alcance. ViewBag y ViewData están indicados para pasar datos entre las acciones del controlador y la vista que se representa.
fuente
ViewBag es un tipo dinámico que le permite establecer u obtener valores dinámicamente y le permite agregar cualquier número de campos adicionales sin una clase fuertemente tipada. Le permiten pasar datos del controlador a la vista. En controlador ......
En vista
Lo que he aprendido es que ambos deben tener la propiedad de guardar nombre dinámico, es decir, ViewBag.victor
fuente
fuente