是否可以在asp.net外部使用Razor View Engine
如果我看Razor View Engine,那么我会看到一个非常简洁的语法,它并不特别与生成html相关联。所以我想知道,在asp.net的“普通”.net环境中使用引擎之外的引擎是多么容易,例如生成文本,代码......是否可以在asp.net外部使用Razor View Engine
任何指针,示例,注释或解释都是受欢迎的。
这里有两个问题:
- 是的,你可以在ASP.NET应用程序域的上下文之外运行Razor视图引擎,在安德鲁的博客中解释:http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of-aspnet-revised-for-mvc3-rc.html
- 然而,剃刀仍然主要集中在生成类似xml的标记(例如HTML),因为Razor解析器使用
<tags>
来确定代码和标记之间的转换。您可以使用它来生成任何文本,但是当您的输出与剃刀对您的意图是什么的假设不匹配时,您可能会遇到问题。
因此,举例来说,虽然这是(因为<div>
标记的)有效剃刀代码:
@if(printHello) {
<div>Hello!</div>
}
下面的代码片断是无效的(因为你好仍然被视为代码!):
@if(printHello) {
Hello!
}
但是有一个特殊的<text>
标签可以用来强制多行块(<text>
标签将不会被渲染)的过渡:
@if(printHello) {
<text>Hello!
Another line</text>
}
还有一个更短的语法来强制单行使用@:
转变:
@if(printHello) {
@:Hello!
}
生成代码或文本:你的意思是像T4模板:http://msdn.microsoft.com/en-us/library/bb126445.aspx或codesmith工具?
这需要upvotes因为T4有与Razor相似,并且是一个实际的多用途代码生成器,作为Visual Studio中的一个功能提供 - 实质上它是一个通用的'Razor' – 2015-07-01 22:02:13
我的理解是T4模板只能在编译时更改, .tt文件被转换并保存为.cs文件。在我的使用中,一个半技术用户想要更新模板而不必重新构建应用程序。有没有简单的方法可以使用T4模板来实现? – daveb 2017-03-22 16:06:41
很可能,只要它生成的内容可以被解释,就像CSHTML可以在运行时由Razor引擎一样。你也可以通过编程触发它来生成代码,但编译代码必须由编译器解析才能使用.... – 2017-03-27 19:39:52
检查RazorEngine,它是建立在剃刀之上的微架构,可以让你做到这一点。
在.net 4中定位应用程序时安装此项目时出现问题,需要更新。 – 2014-06-24 13:08:29
不工作atm。我正在寻找另一种选择。 – 2017-08-18 14:51:38
看看RazorTemplates库。它比RazorEngine库更轻量,它是线程安全的,并具有非常好的最小界面。
编译和执行模板是两行代码那样简单:
var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));
您是否突出了RazorTemplates b/c的线程安全性?此问题的其他建议解决方案之一是不是?我特别感兴趣的是RazorEngine。 – 2012-11-29 19:43:33
这个项目还没有更新很久。 – 2014-06-24 13:07:56
两个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);
嗯,我正在考虑用它来生成电子邮件或即时IronPython代码代。由于这些不使用标签,因此最好查看其他选择。感谢你的回答。 – Thomas 2010-09-03 07:23:47
@Thomas Razor在这些场景中应该可以做得很好,你只需要不时添加这些魔术''标签或者使用'@:'''。一旦支持VS编辑器支持Razor语法,就可以很容易地判断转换发生的时间。 –
marcind
2010-09-03 15:42:43