动态Razor数据源

时间:2012-10-23 17:29:21

标签: c# razor

我正在尝试将Razor Engine用作独立的模板引擎。这很有效,除了我不知道哪些属性将被传递给Razor因此我无法声明列出我的变量的对象。我目前使用字典这样做,允许我写这样的东西:

@Model.Vars["MyProperty"]

但我希望能够简单地写一下:

@MyProperty

有没有办法做到这一点?

提前感谢您的回答。

1 个答案:

答案 0 :(得分:1)

您可以使用一些剃刀语法为您的视图提供智能感知:

@inherits MyNamespace.MoreNamespace.MyCustomRazorModel<MyModelType>

只要您的MyCustomRazorModel实施了所需的WriteWriteLiteral等方法,那么一切都应该正常运行,您可以在视图中使用以下内容:

@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的后备视图。对于独立实现,您可以为视图创建一个支持类型,以便像这样继承。