RazorEngine.Text.RawString不适用于常规MVC局部视图

Mik*_*ynn 10 asp.net-mvc razor razor-2 razorengine

我重复使用相同的部分RazorEngine电子邮件RazorEngine.Parse,但是当我在常规视图中使用相同的Partial时,它new RazorEngine.Text.RawString不起作用,并且不会忽略HTML.我无法使用,Html.Raw因为RazorEngine无法阅读它.我怎么能绕过这个?

<p>
    @(new RazorEngine.Text.RawString(Model.Body))
</p>
Run Code Online (Sandbox Code Playgroud)

在常规的asp.net mvc razor视图中显示底部标记.

<p>
   Welcome!&lt;br/&gt;&lt;br/&gt;Body
</p>
Run Code Online (Sandbox Code Playgroud)

Dip*_*hah 3

您可以ITemplateServiceConfiguration在创建实例时指定RazorEngineService,如项目的 git存储库中所示。

存储库中的代码:

/// <summary>
/// A simple helper demonstrating the @Html.Raw
/// </summary>
public class MyHtmlHelper
{
    /// <summary>
    /// A simple helper demonstrating the @Html.Raw
    /// </summary>
    public IEncodedString Raw(string rawString)
    {
        return new RawString(rawString);
    }
}

/// <summary>
/// A simple helper demonstrating the @Html.Raw
/// </summary>
public abstract class MyClassImplementingTemplateBase<T> : TemplateBase<T>
{
    /// <summary>
    /// A simple helper demonstrating the @Html.Raw
    /// </summary>
    public MyClassImplementingTemplateBase()
    {
        Html = new MyHtmlHelper();
    }

    /// <summary>
    /// A simple helper demonstrating the @Html.Raw
    /// </summary>
    public MyHtmlHelper Html { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

用法:

class Program
{
    static void Main(string[] args)
    {

        var config = new TemplateServiceConfiguration();
        config.BaseTemplateType = typeof(MyClassImplementingTemplateBase<>);
        using (var service = RazorEngineService.Create(config))
        {
            string template = "<p>@Html.Raw(Model.Body)</p>";
            var result = service.RunCompile(template, "templateKey", null, new { Body = "Welcome!<br /><br /><Label>Hello</label>" });
            Console.WriteLine(result);
        }
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

ITemplateServiceConfiguration您唯一需要记住的是在创建 的实例时提供对象RazorEngineService

PS: @(new RazorEngine.Text.RawString(Model.Body))在部分视图中不起作用,因为它被环绕@()并且指令中的任何字符串在写入输出流之前都将被编码。