【发布时间】:2011-09-06 08:09:54
【问题描述】:
我创建了一个动态对象,如下所示:
dynamic myObject = new
{
DisplayName = "Mahesh"
};
Content = Parse("Main", myObject);
然后我将其解析为 Razor 模板。但它不起作用,因为对象无法访问其属性。这里有什么问题?
提前致谢,
【问题讨论】:
我创建了一个动态对象,如下所示:
dynamic myObject = new
{
DisplayName = "Mahesh"
};
Content = Parse("Main", myObject);
然后我将其解析为 Razor 模板。但它不起作用,因为对象无法访问其属性。这里有什么问题?
提前致谢,
【问题讨论】:
我是通过这种方式做到的,并且有效。但我想知道为什么我第一次做的方式不起作用
dynamic FooterModel = new ExpandoObject();
FooterModel.DisplayName= "Kaplan";
【讨论】:
ExpandoObject 有效”会更好。
ExpandoObject 也是“我怎样才能使这项工作?”的答案。我个人的首选可选是正式声明一个视图模型类。
匿名类型存在一些可访问性问题,因为dynamic 通过 c# 提供程序 试图尊重可访问性。不同模块中的匿名类型不可访问(请记住,MVC 页面通常会编译到不同的模块中),因此没有属性。
IIRC,然而,这实际上是在后来的 MVC 补丁中修复的 - 我似乎记得当我的本地计算机的 rev 高于我们的 dev-server 时遇到这个问题,这意味着:它在更高版本上本地工作,但失败为你在开发服务器上描述。
ExpandoObject 不会遇到这种情况,因为它不使用 c# 提供程序(它实现了 IDynamicMetaObjectProvider 代替),并且没有可访问性的概念(它只是将成员名称映射到字典)。
【讨论】: