如果我查看 Razor 视图引擎,我会看到一种非常漂亮且简洁的语法,与生成 html 没有特别的关系。所以我想知道,在“正常”.net 环境中使用 asp.net 之外的引擎(例如生成文本、代码等)有多容易?

欢迎任何指针、示例、评论或解释。

有帮助吗?

解决方案

有两个问题:

  1. 是的,你可以跑的剃刀图发动机的上下文之外的一个ASP.NET 应用程序域,如在安德鲁的博客: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of-aspnet-revised-for-mvc3-rc.html
  2. 然而,剃刀仍然是主要侧重于产生类似xml标记(例如HTML)在意义上的剃刀析程序用途的存在 <tags> 的确定之间的过渡码和标记。你也许可以用它生成的任何短但是你可能会遇到问题时,你的输出并不匹配的剃刀的假设是什么,你的意图。

这样的例子,而这是有效的剃刀代码(因为 <div> 标签):

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

以下段是无效的(因为你好!仍然被视为代码):

@if(printHello) {
   Hello!
}

但是有一个特殊的 <text> 标签,该标签可用来部队过渡为多行块(的 <text> 标签不会被渲染):

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

还有一个短语法力一行中的过渡使用 @::

@if(printHello) {
   @:Hello!
}

其他提示

检查 RazorEngine 的,它是建立在剃刀之上的微架构,可以让你做到这一点。

看一看 RazorTemplates 库。它比RazorEngine库更轻巧,它的线程安全的,具有非常不错的最小接口。

编译和执行模板很简单,只要两行代码:

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

两个都 剃刀引擎Razor模板 这里已经提到过,但请查看 剃须刀机. 。您可以简单地将非 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);

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top