是否可以在 asp.net 之外使用 Razor View Engine
-
26-09-2019 - |
题
如果我查看 Razor 视图引擎,我会看到一种非常漂亮且简洁的语法,与生成 html 没有特别的关系。所以我想知道,在“正常”.net 环境中使用 asp.net 之外的引擎(例如生成文本、代码等)有多容易?
欢迎任何指针、示例、评论或解释。
解决方案
有两个问题:
- 是的,你可以跑的剃刀图发动机的上下文之外的一个ASP.NET 应用程序域,如在安德鲁的博客: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of-aspnet-revised-for-mvc3-rc.html
- 然而,剃刀仍然是主要侧重于产生类似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中工具?
不隶属于 StackOverflow