首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC中的ViewBag如何工作

ASP.NET MVC中的ViewBag如何工作
EN

Stack Overflow用户
提问于 2013-02-15 21:39:42
回答 5查看 126.8K关注 0票数 103

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

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

举个例子,我们会很感激的!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-02-21 01:15:53

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

它是这样声明的:

dynamic ViewBag = new System.Dynamic.ExpandoObject();

这就是为什么你可以这样做:

ViewBag.Foo = "Bar";

Expander对象代码示例:

代码语言:javascript
复制
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;
        }
    }
}
票数 92
EN

Stack Overflow用户

发布于 2013-02-15 21:43:48

它是一个动态对象,这意味着您可以在控制器中向其添加属性,并稍后在视图中读取它们,因为您实际上是在创建对象,这是动态类型的一个特性。请参阅MSDN article on dynamics。查看this article关于它与MVC的用法。

如果您想将其用于web表单,请向基页类添加一个动态属性,如下所示:

代码语言:javascript
复制
public class BasePage : Page
{

    public dynamic ViewBagProperty
    {
        get;
        set;
    }
}

让你的所有页面都继承自这个页面。您应该能够在ASP.NET标记中执行以下操作:

代码语言:javascript
复制
<%= ViewBagProperty.X %>

这应该行得通。如果没有,有一些方法可以解决它。

票数 33
EN

Stack Overflow用户

发布于 2013-02-15 21:42:45

如建议的那样,ViewBagSystem.Dynamic.ExpandoObjectViewBag中的属性本质上是KeyValue对,您可以通过键访问值。从这个意义上说,它们是等效的:

代码语言:javascript
复制
ViewBag.Foo = "Bar";
ViewBag["Foo"] = "Bar";
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14896013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档