以下代码生成" 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类型。如何将其安全地转换回类型?
谢谢!
答案 0 :(得分:1)
我认为你的意思是:
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
对象。
答案 1 :(得分:1)
你不是。这是一个奇怪的副作用,你从一个匿名类开始,这是一个内部的,需要被包装。
RazorDynamicObject会再次包装所有调用,以便能够处理匿名类型的属性。 RazorDynamicObject的设计方式使其甚至适用于Appdomains(隔离)。
如果您需要具体实例,则需要使用具体类。也许应该有一个禁用递归包装的选项。如果您认为需要该功能,请在github RazorEngine页面上打开一个问题。
编辑:从3.6.2开始不再适用。实际上,您现在可以通过强制转换为具体类型来转义此RazorDynamicObject包装器。有一些隐藏的场景我们会自动转义包装器(但我不会在这里详细介绍)。请注意,现在这应该是#34;只是工作"。
Matthid,RazorEngine的贡献者。