我正在尝试将Razor Engine用作独立的模板引擎。这很有效,除了我不知道哪些属性将被传递给Razor因此我无法声明列出我的变量的对象。我目前使用字典这样做,允许我写这样的东西:
@Model.Vars["MyProperty"]
但我希望能够简单地写一下:
@MyProperty
有没有办法做到这一点?
提前感谢您的回答。
答案 0 :(得分:1)
您可以使用一些剃刀语法为您的视图提供智能感知:
@inherits MyNamespace.MoreNamespace.MyCustomRazorModel<MyModelType>
只要您的MyCustomRazorModel
实施了所需的Write
,WriteLiteral
等方法,那么一切都应该正常运行,您可以在视图中使用以下内容:
@MyProperty
假设您有这样的定义:
public class MyCustomRazorModel<T>
{
public string MyProperty { get; set; }
}
我提到你的支持Razor实现应该只是Generic,这样你就可以将它重复用于你想要模板化的任何模型。这也是Razor引擎在ASP.NET中的工作方式,它提供了一个在@Model
属性中公开模型的Generic模型。
修改强>
例如,看看下面的类,看看框架人员是如何做到的:
http://msdn.microsoft.com/en-us/library/gg402107(v=vs.108).aspx
这是ASP.NET中RazorEngine的后备视图。对于独立实现,您可以为视图创建一个支持类型,以便像这样继承。