RazorEngine.Text.RawString在常规MVC部分视图上不起作用

时间:2018-09-20 21:27:24

标签: asp.net-mvc razor razorengine razor-2

我使用RazorEngineRazorEngine.Parse电子邮件重用了相同的部分,但是当我在常规视图中使用相同的部分时,new RazorEngine.Text.RawString不起作用并且不会忽略HTML。我无法使用Html.Raw,因为RazorEngine无法读取它。我该如何解决?

<p>
    @(new RazorEngine.Text.RawString(Model.Body))
</p>

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

<p>
   Welcome!&lt;br/&gt;&lt;br/&gt;Body
</p>

1 个答案:

答案 0 :(得分:3)

如项目的git repository所示,您可以在创建ITemplateServiceConfiguration的实例时指定RazorEngineService

存储库中的代码:

/// <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; }
}

用法:

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();
    }
}

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

PS: @(new RazorEngine.Text.RawString(Model.Body))在局部视图中不起作用,因为它包裹在@()周围,并且指令中的任何字符串都将在写入输出流之前进行编码