Tho*_*mas 102 asp.net asp.net-mvc code-generation templating razor
如果我看Razor视图引擎,然后我看到一个非常漂亮和简洁的语法并不特别依赖于生成HTML.所以我想,这将是多么容易使用在发动机外部asp.net中的一个"正常"的.NET环境,例如生成文本,代码,...
欢迎使用任何指针,示例,注释或解释.
mar*_*ind 79
这里有两个问题:
<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)
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)
无论RazorEngine和RazorTemplates已经在这里提到的,但检查出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)
| 归档时间: |
|
| 查看次数: |
38351 次 |
| 最近记录: |