是否有可能在asp.net之外使用Razor View Engine

如果我看Razor View Engine,那么我会看到一个非常简洁的语法,它并不特别与生成html相关联。 所以我想知道,使用asp.net以外的引擎在“普通”.net环境下生成文本,代码等是多么容易…

任何指针,例子,评论或解释是受欢迎的。

这里有两个问题:

  1. 是的,您可以在ASP.NET应用程序域的上下文之外运行Razor View Engine,如Andrew的博客中所述: http : //vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of -aspnet修订的换MVC3-rc.html
  2. 然而,Razor仍然主要关注如何生成类似XML的标记(例如HTML),因为Razorparsing器使用<tags>来确定代码和标记之间的转换。 您可以使用它来生成任何文本,但是当您的输出与剃刀对您的意图的假设不匹配时,可能会遇到问题。

因此,例如,这是有效的Razor代码(因为<div>标签):

 @if(printHello) { <div>Hello!</div> } 

以下代码段无效(因为Hello!仍然被视为代码):

 @if(printHello) { Hello! } 

然而,有一个特殊的<text>标签可以用来强制多行块的转换( <text>标签不会被渲染):

 @if(printHello) { <text>Hello! Another line</text> } 

还有一个简短的语法强制单行转换使用@: ::

 @if(printHello) { @:Hello! } 

检查RazorEngine ,这是一个build立在Razor之上的小框架,可以让你做到这一点。

看看RazorTemplates图书馆。 它比RazorEngine库更轻量,它是线程安全的,并具有非常好的最小界面。

编译和渲染一个模板就像两行代码一样简单:

 var template = Template.Compile("Hello @Model.Name!"); Console.WriteLine(template.Render(new { Name = "World" })); 

RazorEngineRazorTemplates已经在这里提到,但是看看RazorMachine 。 您可以简单地将您的非MVC应用程序指向(另一个)现有的MVC应用程序的〜/ Views文件夹,通过发送适当的模型执行并获得两行代码的渲染输出:

 var sb = new StringBuilder(); //RazorMachine magic: //*tweets* is basically List<TwitterPost> - simple collection of custom POCO //first param for rm.ExecuteUrl points to ~/Views folder, MVC style var rm = new RazorMachine(htmlEncode: false); ITemplate template = rm.ExecuteUrl("~/twitter/twitter", tweets); //do whatever you want with result sb.Append(template); 

生成代码或文本:你的意思是像T4模板: http : //msdn.microsoft.com/en-us/library/bb126445.aspx或codesmith工具?