asp.net - ASP.NET MVC 中的 ViewBag 如何工作

标签 asp.net asp.net-mvc viewbag

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

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

示例将非常感激!

最佳答案

ViewBag 的类型为 dynamic,但其内部是一个 System.Dynamic.ExpandoObject()

声明如下:

动态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/

相关文章:

c# - 如何禁用在 VS 2015 的 web.config 和 css 文件中显示绿色波浪线?

asp.net-mvc - 当匹配不包含该参数的路由时,ActionLinks 恢复为查询字符串参数

jquery - 如何在jquery中读取ViewBag列表

javascript - 如果 reCaptcha 仍未完成,则停止或中断用户登录

javascript - Ajax/jQuery post 之后从 DOM 获取值

asp.net - 我可以更改逻辑应用的 Aspnet 版本吗?

c# - MySQL Provider 和 ASP.NET MVC 5 的成员资格问题,未考虑 minRequiredNonalphanumericCharacters

asp.net-mvc - 将 Html.BeginForm 与查询字符串一起使用

asp.net-mvc - 我们应该如何将数据传递到大型 ASP.NET MVC 网站中的 View

c# - ViewBag 中的 System.Random 不显示为字符串?