使用视图模型托管Razor View引擎

时间:2010-12-15 10:06:40

标签: asp.net-mvc-3 razor

我想在ASP.NET MVC之外使用Razor View Engine为电子邮件生成HTML,我喜欢语法,当我的项目中已经有Razor时,似乎没有必要使用另一个模板引擎。

所以我环顾四周,找到了如何做到这个指南.. http://blog.andrewnurse.net/2010/11/16/HostingRazorOutsideOfASPNetRevisedForMVC3RC.aspx

不幸的是我无法找到任何指定视图模型的方法,这很难过,因为我真的非常希望即使对于我的电子邮件也有强类型视图。

那么有没有办法在ASP.NET MVC之外使用强类型视图模型解析Razor模板,还是这么麻烦,不值得麻烦?

2 个答案:

答案 0 :(得分:2)

使用@model标签实际上是@inherits标签的快捷方式。

您指定了类,您生成的类将继承自使用@inherits指定的类。

因此,如果您指定@inherits MyTemplate<MyModel>

MyTemplate应如下所示:

class MyTemplate<T> {
    public T Model { get; set; }

    public abstract void Execute();
    public virtual void Write(object value) {
        WriteLiteral(value);
    }

    public virtual void WriteLiteral(object value) {
        // Actual writing goes here
    }

}

剃刀解析的结果,你需要编译,并从。

创建一个实例

创建实例后,您可以设置Model属性,并调用Execute生成结果,生成的方式和内容取决于您。

答案 1 :(得分:2)

使用最后一个稳定的RazorEngine,足以指定

@inherits RazorEngine.Templating.TemplateBase<MyModel>

除非您需要更多功能