ASP.NetMVC的ViewBag个作品?MSDN说它只是一个Object,这让我很好奇,像ViewBag.FooViewBag["Hello"]这样的"魔法"属性到底是如何工作的?

另外,我如何创建一个并在我的ASP.NETWebForms应用程序中使用它?

如果能举个例子,我们将不胜感激!

推荐答案

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相关问答推荐

如何在 MVC 中为国家和州/省创建 Select 列表

Thread.CurrentPrincipal 错误地声称是匿名的

从 Request.Url.AbsolutePath 获取应用相对 url

系统日期时间?与 System.DateTime

HttpResponse 的区别:SetCookie、AppendCookie、Cookies.Add

IIS 6/ASP.NET Windows 身份验证 list ?

如何通过后面的代码不显示

哪些行为驱动开发 (BDD) 工具/框架可用于 Microsoft Stack?

Razor 主机工厂错误

使用 ASPNet_Regiis 加密自定义配置部分 - 你能做到吗?

从命令行复制 VS2008发布网站

在 ASP.NET 中实现 404 的最佳方法

如何验证用户在 CheckBoxList 中 Select 了至少一个复选框?

捕获的异常本身为 null !

为什么 HttpWebRequest 会抛出异常而不是返回 HttpStatusCode.NotFound?

IIS - 无法通过 ip 地址而不是 localhost 访问页面

ASP.NET 按钮重定向到另一个页面

如何直接在 .aspx 页面中访问 web.config 设置?

回发后运行javascript函数

如何清除 System.Runtime.Caching.MemoryCache