Razor 引擎动态模板模型成员
Razor Engine Dynamic Template Model Members
以下代码生成 "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 类型。如何安全地将其转换回类型?
谢谢!
我想你的意思是:
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
属性 将只是 return 模型的当前类型,而不是 Type
对象。
你不知道。这是一个奇怪的副作用,因为您从匿名 class 开始,它是内部的,需要包装。
RazorDynamicObject 再次包装所有调用,以便能够处理匿名类型的属性。 RazorDynamicObject 的设计方式使其甚至可以跨 Appdomains(隔离)工作。
如果您需要具体实例,则需要使用具体实例 class。也许应该有一个选项来禁用递归包装。如果您觉得需要该功能,请在 github RazorEngine 页面上提出问题。
编辑:从 3.6.2 开始不再如此。实际上,您现在可以通过转换为您的具体类型来转义此 RazorDynamicObject 包装器。有一些隐藏的场景我们会自动逃逸包装器(但我不会在这里详述)。请注意,现在应该 "just work".
Matthid,RazorEngine 贡献者。
以下代码生成 "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 类型。如何安全地将其转换回类型?
谢谢!
我想你的意思是:
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
属性 将只是 return 模型的当前类型,而不是 Type
对象。
你不知道。这是一个奇怪的副作用,因为您从匿名 class 开始,它是内部的,需要包装。
RazorDynamicObject 再次包装所有调用,以便能够处理匿名类型的属性。 RazorDynamicObject 的设计方式使其甚至可以跨 Appdomains(隔离)工作。
如果您需要具体实例,则需要使用具体实例 class。也许应该有一个选项来禁用递归包装。如果您觉得需要该功能,请在 github RazorEngine 页面上提出问题。
编辑:从 3.6.2 开始不再如此。实际上,您现在可以通过转换为您的具体类型来转义此 RazorDynamicObject 包装器。有一些隐藏的场景我们会自动逃逸包装器(但我不会在这里详述)。请注意,现在应该 "just work".
Matthid,RazorEngine 贡献者。