ASP.NET MVC 的 ViewBag 是如何工作的? MSDN 说它只是一个 Object ,这让我很感兴趣,“魔术”属性如 ViewBag.Foo 和魔术字符串 ViewBag["Hello"] 实际如何工作?

另外,我如何制作一个并在我的 ASP.NET WebForms 应用程序中使用它?

示例将不胜感激!

最佳答案

ViewBagdynamic 类型,但内部是 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/

10-15 06:16