ASP.NET MVC 的 ViewBag
是如何工作的? MSDN 说它只是一个 Object
,这让我很感兴趣,“魔术”属性如 ViewBag.Foo
和魔术字符串 ViewBag["Hello"]
实际如何工作?
另外,我如何制作一个并在我的 ASP.NET WebForms 应用程序中使用它?
示例将不胜感激!
最佳答案
ViewBag
是 dynamic
类型,但内部是 System.Dynamic.ExpandoObject()
它是这样声明的:dynamic ViewBag = new System.Dynamic.ExpandoObject();
这就是为什么你可以这样做:ViewBag.Foo = "Bar";
示例扩展器对象代码:
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;
}
}
}
关于asp.net - ASP.NET MVC 中的 ViewBag 如何工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14896013/