在 ASP.NET MVC 中,属性 ViewBag
的类型为动态。
Throught the code ,ViewBag
的各种“属性”被分配给:
ViewBag.Message = "Hello world";
ViewBag.Title = "Page title";
这是如何工作的?来自阅读docs我知道 ViewBag 本身可以是任何东西,但是为什么(或如何)将某些内容分配给动态类型的“成员”呢?
以下是ViewBag
在公共(public)抽象类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; }
只是好奇。
相关问题: Where can I find the official documentation for DynamicViewDataDictionary?
最佳答案
ViewBag
是 ExpandoObject
或类似的东西。这基本上只是一个美化的字典,其中“属性”是键。
更新:
实际上,它是一个DynamicViewDataDictionary
,ASP.NET MVC 源代码内部的类。该类继承自DynamicObject
简单地说,它是 ViewDataDictionary
的包装器,在 ViewBag
围绕 ControllerBase
的 ViewData
属性的情况下。< br/>
正如您在 TryGetMember
和 TrySetMember
中看到的,调用被委托(delegate)给 ViewData
,没有任何逻辑。
关于c# - C# 中动态对象的赋值是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12393661/