Answers:
这里有两个问题:
<tags>
来确定代码和标记之间的过渡的意义上讲,Razor仍主要专注于生成类似xml的标记(例如HTML)。您可能可以使用它生成任何文本,但是当您的输出与Razor关于您的意图的假设不符时,您可能会遇到问题。因此,例如,虽然这是有效的Razor代码(由于<div>
标记):
@if(printHello) {
<div>Hello!</div>
}
以下代码段无效(因为Hello!仍被视为代码):
@if(printHello) {
Hello!
}
但是,有一个特殊的<text>
标记可用于强制转换多行块(该<text>
标记将不会呈现):
@if(printHello) {
<text>Hello!
Another line</text>
}
还有一种较短的语法,可以使用强制单行过渡@:
:
@if(printHello) {
@:Hello!
}
<text>
标记或不时使用即可@:
。一旦VS编辑器对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工具?