【问题标题】:I cannot access to dynamic object properties in Razor Template我无法访问 Razor 模板中的动态对象属性
【发布时间】:2011-09-06 08:09:54
【问题描述】:

我创建了一个动态对象,如下所示:

dynamic myObject = new
{
    DisplayName = "Mahesh"
}; 



Content = Parse("Main", myObject);

然后我将其解析为 Razor 模板。但它不起作用,因为对象无法访问其属性。这里有什么问题?

提前致谢,

【问题讨论】:

    标签: .net dynamic razor


    【解决方案1】:

    我是通过这种方式做到的,并且有效。但我想知道为什么我第一次做的方式不起作用

    dynamic FooterModel = new ExpandoObject();
    FooterModel.DisplayName= "Kaplan";
    

    【讨论】:

    • 如果您将问题更新为“但是ExpandoObject 有效”会更好。
    • @Justin 实际上,我可以去任何一种方式 - 因为ExpandoObject 也是“我怎样才能使这项工作?”的答案。我个人的首选可选是正式声明一个视图模型类。
    【解决方案2】:

    匿名类型存在一些可访问性问题,因为dynamic 通过 c# 提供程序 试图尊重可访问性。不同模块中的匿名类型不可访问(请记住,MVC 页面通常会编译到不同的模块中),因此没有属性。

    IIRC,然而,这实际上是在后来的 MVC 补丁中修复的 - 我似乎记得当我的本地计算机的 rev 高于我们的 dev-server 时遇到这个问题,这意味着:它在更高版本上本地工作,但失败为你在开发服务器上描述。

    ExpandoObject 不会遇到这种情况,因为它不使用 c# 提供程序(它实现了 IDynamicMetaObjectProvider 代替),并且没有可访问性的概念(它只是将成员名称映射到字典)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 2020-06-14
      • 2011-08-10
      • 1970-01-01
      • 2014-04-12
      相关资源
      最近更新 更多