existe - Cómo funciona ViewBag en ASP.NET MVC
viewbag razor (7)
Es un objeto dinámico, lo que significa que puede agregarle propiedades en el controlador y leerlas más adelante en la vista, porque básicamente está creando el objeto como lo hace, una característica del tipo dinámico. Vea este artículo de MSDN sobre dinámica. Vea este artículo sobre su uso en relación con MVC.
Si desea utilizar esto para formularios web, agregue una propiedad dinámica a una clase de página base como esta:
public class BasePage : Page
{
public dynamic ViewBagProperty
{
get;
set;
}
}
Haga que todas sus páginas hereden de esto. Debería poder, en su marcado ASP.NET, hacer:
<%= ViewBagProperty.X %>
Eso debería funcionar. Si no, hay formas de evitarlo.
¿Cómo funciona el ViewBag
ASP.NET MVC? MSDN dice que es solo un Object
, lo que me intriga, ¿cómo funcionan ViewBag.Foo
propiedades "Mágicas" como ViewBag.Foo
y Magic Strings ViewBag["Hello"]
?
Además, ¿cómo puedo hacer uno y usarlo en mi aplicación ASP.NET WebForms?
¡Los ejemplos serían realmente apreciados!
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 en ViewData["Foo"]
(tipo de ViewDataDictionary), por lo que esos 2 son intercambiables. ViewData["Foo"]
y ViewBag.Foo
.
Y alcance ViewBag y ViewData están destinados a pasar datos entre las Acciones del Controlador y Ver los renders.
ViewBag es un tipo dinámico que le permite establecer dinámicamente u obtener valores y le permite agregar cualquier cantidad de campos adicionales sin una clase de tipo fuerte. Le permiten pasar datos del controlador para ver. En el controlador ......
public ActionResult Index()
{
ViewBag.victor = "My name is Victor";
return View();
}
En vista
@foreach(string a in ViewBag.victor)
{
.........
}
Lo que he aprendido es que ambos deberían tener la propiedad de guardar nombre dinámico, es decir, ViewBag.victor
ViewBag se utiliza para pasar datos de Controller Action para ver los datos que se pasan. Ahora puede pasar datos usando entre Controller Action y View usando ViewBag o ViewData. ViewBag: es un tipo de objeto dinámico, lo que significa que puede agregar nuevos campos a viewbag dinámicamente y acceder a estos campos en la vista. Debe inicializar el objeto de viewbag en el momento de crear nuevos campos.
por ejemplo: 1. Creating ViewBag: ViewBag.FirstName = "John";
- Acceso a la vista: @ ViewBag.FirstName.
ViewBag
es de tipo dynamic
, pero internamente es System.Dynamic.ExpandoObject()
Se declara así:
dynamic ViewBag = new System.Dynamic.ExpandoObject();
que es por lo que puedes hacer:
ViewBag.Foo = "Bar";
Un ejemplo de código de objeto expansor:
public class ExpanderObject : DynamicObject, IDynamicMetaObjectProvider
{
public Dictionary<string, object> objectDictionary;
public ExpanderObject()
{
objectDictionary = new Dictionary<string, object>();
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
object val;
if (objectDictionary.TryGetValue(binder.Name, out val))
{
result = val;
return true;
}
result = null;
return false;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
try
{
objectDictionary[binder.Name] = value;
return true;
}
catch (Exception ex)
{
return false;
}
}
}
ViewBag
es un System.Dynamic.ExpandoObject
como se sugiere. Las propiedades en ViewBag
son esencialmente pares KeyValue
, donde accede al valor con la clave. En este sentido, estos son equivalentes:
ViewBag.Foo = "Bar";
ViewBag["Foo"] = "Bar";
public dynamic ViewBag
{
get
{
if (_viewBag == null)
{
_viewBag = new DynamicViewData(() => ViewData);
}
return _viewBag;
}
}