ASP.NetMVC的ViewBag
个作品?MSDN说它只是一个Object
,这让我很好奇,像ViewBag.Foo
和ViewBag["Hello"]
这样的"魔法"属性到底是如何工作的?
另外,我如何创建一个并在我的ASP.NETWebForms应用程序中使用它?
如果能举个例子,我们将不胜感激!
ASP.NetMVC的ViewBag
个作品?MSDN说它只是一个Object
,这让我很好奇,像ViewBag.Foo
和ViewBag["Hello"]
这样的"魔法"属性到底是如何工作的?
另外,我如何创建一个并在我的ASP.NETWebForms应用程序中使用它?
如果能举个例子,我们将不胜感激!
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;
}
}
}