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

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

在常规的asp.net mvc Razor View 中显示底部标记。
<p>
   Welcome!&lt;br/&gt;&lt;br/&gt;Body
</p>

最佳答案

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

信息库中的代码:

/// <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对象。

P.S: @(new RazorEngine.Text.RawString(Model.Body))在部分 View 中不起作用,因为它包裹在@()周围,并且指令中的任何字符串在写入输出流之前都会被编码。

关于asp.net-mvc - RazorEngine.Text.RawString在常规MVC部分 View 上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52433559/

10-12 03:50