【问题标题】:Razor Engine Dynamic Template Model MembersRazor Engine 动态模板模型成员
【发布时间】:2015-02-12 22:48:14
【问题描述】:

以下代码产生“WTF??”

var t = @"@((Model.Type as Type == null)?""WTF??"":""Makes Sense"")";
var s = Engine.Razor.RunCompile(t, Guid.NewGuid().ToString(), null, new { Type = typeof(DateTime)});
Console.WriteLine(s);

Model.Type 似乎是 RazorDynamicObject 类型。如何安全地将其转换回类型?

谢谢!

【问题讨论】:

    标签: c# razorengine


    【解决方案1】:

    你没有。这是一个奇怪的副作用,因为您从一个匿名类开始,它是内部的并且需要被包装。

    RazorDynamicObject 确实再次包装了所有调用,以便能够处理匿名类型的属性。 RazorDynamicObject 的设计方式使其甚至可以跨 Appdomains 工作(隔离)。

    如果您需要具体实例,则需要使用具体类。也许应该有一个选项来禁用递归包装。如果您觉得需要该功能,请在 github RazorEngine 页面上打开一个问题。

    编辑:从 3.6.2 开始,这不再适用。您现在实际上可以通过转换为您的具体类型来逃避这个 RazorDynamicObject 包装器。有一些隐藏的场景我们会自动转义包装器(但我不会在这里详细介绍)。请注意,这现在应该“正常工作”。

    Matthid,RazorEngine 贡献者。

    【讨论】:

      【解决方案2】:

      我想你的意思是:

      var t = @"@((typeof(Model.Type) as Type == null)?""WTF??"":""Makes Sense"")";
      var s = Engine.Razor.RunCompile(t, Guid.NewGuid().ToString(), null, 
              new { Type = typeof(DateTime)});
      
      Console.WriteLine(s);
      

      Type 属性只会返回模型的当前类型,而不是 Type 对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-27
        • 2021-07-25
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        • 2017-10-20
        相关资源
        最近更新 更多