是否可以在asp.net外部使用Razor View Engine

Tho*_*mas 102 asp.net asp.net-mvc code-generation templating razor

如果我看Razor视图引擎,然后我看到一个非常漂亮和简洁的语法并不特别依赖于生成HTML.所以我想,这将是多么容易使用在发动机外部asp.net中的一个"正常"的.NET环境,例如生成文本,代码,...

欢迎使用任何指针,示例,注释或解释.

mar*_*ind 79

这里有两个问题:

  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),因为Razor解析器使用存在<tags>来确定代码和标记之间的转换.您可以使用它来生成任何文本,但是当您的输出与Razor关于您的意图的假设不匹配时,您可能会遇到问题.

所以例如虽然这是有效的Razor代码(因为<div>标签):

@if(printHello) {
   <div>Hello!</div>
}
Run Code Online (Sandbox Code Playgroud)

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

@if(printHello) {
   Hello!
}
Run Code Online (Sandbox Code Playgroud)

但是,有一个特殊<text>标记可用于强制多行块的转换(<text>不会呈现标记):

@if(printHello) {
   <text>Hello!
   Another line</text>
}
Run Code Online (Sandbox Code Playgroud)

还有一种较短的语法来强制单行转换使用@::

@if(printHello) {
   @:Hello!
}
Run Code Online (Sandbox Code Playgroud)

  • @Thomas Razor应该在这些场景中做得很好,你只需要添加那些神奇的`<text>`标签或者偶尔使用`@:`.一旦VS编辑器支持Razor语法,就可以很容易地判断转换何时发生. (6认同)
  • 好吧,我正在考虑使用它来生成电子邮件或即时IronPython代码生成之类的东西.由于这些不使用标签,因此最好查看其他替代方案.谢谢你的回答. (2认同)

Ari*_*iel 34

检查RazorEngine,它是一个基于Razor构建的小框架,允许您这样做.


ale*_*xey 21

看看RazorTemplates库.它比RazorEngine库更轻量级,它是线程安全的,并且具有非常好的最小接口.

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

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


Ant*_*nek 8

无论RazorEngineRazorTemplates已经在这里提到的,但检查出RazorMachine.您可以简单地将非MVC应用程序指向(另一个)现有MVC应用程序的〜/ Views文件夹,通过发送正确的模型执行并在2行代码上获得渲染输出:

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);
Run Code Online (Sandbox Code Playgroud)