2

在 ASP.NET MVC 中,该属性ViewBag是动态类型的。

通过代码,将各种“属性”ViewBag分配给:

ViewBag.Message = "Hello world";
ViewBag.Title = "Page title";

这是如何运作的?通过阅读文档,我ViewBag可以得到任何东西,但是为什么(或如何)将某些东西分配给动态类型的“成员”?

这是ViewBag在类中定义的方式public abstract class ControllerBase : IController

 [Dynamic]
 public dynamic ViewBag { get; }
 //
 // Summary:
 //     Gets or sets the dictionary for view data.
 //
 // Returns:
 //     The dictionary for the view data.
 public ViewDataDictionary ViewData { get; set; }

只是好奇。

相关问题: 在哪里可以找到 DynamicViewDataDictionary 的官方文档?

4

2 回答 2

4

ViewBag是一个ExpandoObject或类似的东西。这基本上只是一个以“属性”为键的美化字典。

更新
实际上,它是DynamicViewDataDictionaryASP.NET MVC 源代码内部的一个类。此类继承自DynamicObjecta 并且只是 a 的包装器,ViewDataDictionary以防. 正如你所看到的,调用被委派给没有任何逻辑的。ViewBagViewDataControllerBase
TryGetMemberTrySetMemberViewData

于 2012-09-12T17:49:27.830 回答
0

“Visual C# 2010 引入了一种新类型,动态。该类型是静态类型,但动态类型的对象绕过静态类型检查。在大多数情况下,它的功能就像它具有类型对象一样。在编译时,类型化的元素因为动态假设支持任何操作。因此,您不必担心对象是否从 COM API、从 IronPython 等动态语言、从 HTML 文档对象模型 (DOM)、从反射获取其值,或来自程序中的其他地方。但是,如果代码无效,则会在运行时捕获错误。

http://msdn.microsoft.com/en-us/library/dd264736.aspx

于 2012-09-12T18:15:55.477 回答