RazorEngine.Text.RawString не работает на обычном частичном представлении MVC - PullRequest
0 голосов
/ 21 сентября 2018

Я повторно использую то же частичное для электронной почты RazorEngine, используя RazorEngine.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 голосов
/ 17 октября 2018

Вы можете указать 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; }
}

Использование:

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)) не работает при частичном просмотре, поскольку он обернут вокруг @(), и любая строка из директивы будет закодирована до ее записи в выходной поток.

...