Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 使用视图模型托管Razor视图引擎_Asp.net Mvc 3_Razor - Fatal编程技术网

Asp.net mvc 3 使用视图模型托管Razor视图引擎

Asp.net mvc 3 使用视图模型托管Razor视图引擎,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我想使用ASP.NET MVC之外的Razor视图引擎来生成电子邮件的HTML,我喜欢它的语法,而且当我的项目中已经有Razor时,似乎没有必要使用另一个模板引擎 所以我环顾四周,找到了这本关于如何做的指南。。 不幸的是,我找不到任何指定视图模型的方法,这很令人伤心,因为我真的,真的很想拥有强类型视图,即使是我的电子邮件 那么,有没有办法在ASP.NET MVC之外用强类型视图模型解析Razor模板呢?或者说,这太麻烦了,不值得这么麻烦?使用@model标记实际上是@inherits标记的快捷

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

所以我环顾四周,找到了这本关于如何做的指南。。

不幸的是,我找不到任何指定视图模型的方法,这很令人伤心,因为我真的,真的很想拥有强类型视图,即使是我的电子邮件


那么,有没有办法在ASP.NET MVC之外用强类型视图模型解析Razor模板呢?或者说,这太麻烦了,不值得这么麻烦?

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

如果指定了类,则生成的类将继承使用@inherits指定的类

因此,如果指定
@inherits MyTemplate

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
    }

}
类MyTemplate{
公共T模型{get;set;}
公共抽象void Execute();
公共虚拟无效写入(对象值){
书面(价值);
}
公共虚拟void writeleral(对象值){
//真正的文字在这里
}
}
razor解析的结果,您需要编译,并从中创建一个实例


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

使用@Model标记实际上是@inherits标记的快捷方式

如果指定了类,则生成的类将继承使用@inherits指定的类

因此,如果指定
@inherits MyTemplate

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
    }

}
类MyTemplate{
公共T模型{get;set;}
公共抽象void Execute();
公共虚拟无效写入(对象值){
书面(价值);
}
公共虚拟void writeleral(对象值){
//真正的文字在这里
}
}
razor解析的结果,您需要编译,并从中创建一个实例


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

对于最后一个稳定的RazorEngine,只需指定

@inherits RazorEngine.Templating.TemplateBase<MyModel>
@继承RazorEngine.Templating.TemplateBase

除非最后一个稳定的RazorEngine需要更多功能,否则只需指定

@inherits RazorEngine.Templating.TemplateBase<MyModel>
@继承RazorEngine.Templating.TemplateBase

除非您需要更多的功能

查看在MVC之外托管razor的预构建包查看在MVCThanks之外托管razor的预构建包,这正是我想要让RazorEngine正常工作的路线!谢谢,这正是我要找的让RazorEngine正常工作的线路!