是否有可能在asp.net之外使用Razor View Engine
如果我看Razor View Engine,那么我会看到一个非常简洁的语法,它并不特别与生成html相关联。 所以我想知道,使用asp.net以外的引擎在“普通”.net环境下生成文本,代码等是多么容易…
任何指针,例子,评论或解释是受欢迎的。
这里有两个问题:
- 是的,您可以在ASP.NET应用程序域的上下文之外运行Razor View Engine,如Andrew的博客中所述: http : //vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of -aspnet修订的换MVC3-rc.html
- 然而,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" }));
RazorEngine和RazorTemplates已经在这里提到,但是看看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工具?