代码之家  ›  专栏  ›  技术社区  ›  Thomas

是否可以在ASP.NET外部使用Razor View引擎

  •  100
  • Thomas  · 技术社区  · 14 年前

    如果我看Razor视图引擎,那么我会看到一个非常好和简洁的语法,它与生成HTML没有特别的联系。所以我想知道,在“普通”的.NET环境中使用ASP.NET外部的引擎有多容易,例如生成文本、代码……

    欢迎使用任何指针、示例、注释或解释。

    5 回复  |  直到 6 年前
        1
  •  77
  •   Charles Lambert    9 年前

    这里有两个问题:

    1. 是的,可以在ASP.NET应用程序域的上下文之外运行Razor视图引擎,如安德鲁的博客中所述: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of-aspnet-revised-for-mvc3-rc.html
    2. 然而,Razor仍然主要关注生成类似XML的标记(例如HTML),因为Razor解析器使用 <tags> 确定代码和标记之间的转换。您可能可以使用它来生成任何文本,但是当您的输出与Razor对您的意图的假设不匹配时,您可能会遇到问题。

    例如,当这是有效的Razor代码时(因为 <div> 标签):

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

    以下代码段无效(因为hello!仍被视为代码):

    @if(printHello) {
       Hello!
    }
    

    但是有一个特别的 <text> 可用于强制多行块转换的标记 <文本& GT; 不会呈现标记):

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

    还有一个较短的语法来强制使用 @: :

    @if(printHello) {
       @:Hello!
    }
    
        2
  •  33
  •   TrueWill    9 年前

    检查 RazorEngine 它是一个建立在Razor之上的小框架,允许您这样做。

        3
  •  21
  •   alexey    12 年前

    看一看 RazorTemplates 图书馆。它比RazoEngine库更轻,线程安全,具有非常好的最小接口。

    编译和呈现模板简单到两行代码:

    var template = Template.Compile("Hello @Model.Name!");
    Console.WriteLine(template.Render(new { Name = "World" }));
    
        4
  •  8
  •   Antonin Jelinek    12 年前

    两个 剃刀发动机 剃刀模板 这里已经提到了,但是请看 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);
    
        5
  •  3
  •   Brian Mains    14 年前

    生成代码或文本:您的意思是像t4模板一样: http://msdn.microsoft.com/en-us/library/bb126445.aspx 还是密码工工具?