Как вывести raw html при использовании RazorEngine (не из MVC)



Я пытаюсь создавать электронные письма с HTML-контентом. этот контент уже прошел через санитарию, поэтому я не беспокоюсь в этом отношении, однако, когда я звоню:



Razor.Parse(template, model);


на следующем шаблоне бритвы:



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body>
@(new System.Web.HtmlString(Model.EmailContent))
</body>
</html>


электронная почта, которая выводится, закодирована в HTMl, но мне нужно ее декодировать. Как я могу это сделать?

646   6  

6 ответов:

RazorEngine, как и MVC Razor View Engine, будет автоматически кодировать значения, записанные в шаблон. Чтобы обойти это, мы ввели интерфейс под названием IEncodedString, с реализациями по умолчаниюHtmlEncodedString и RawString.

чтобы использовать последний, просто позвоните во встроенный Raw метод TemplateBase:

@Raw(Model.EmailContent)

к вашему сведению у меня есть вилка, которая включает в себя @Html.Необработанный.(..) синтаксис здесь:

https://github.com/Antaris/RazorEngine/pull/105

если у вас есть специальный базовый класс для ваших шаблонов, вы можете код Write метод, чтобы вести себя подобно обычному шаблону MVC: если выходное значение IHtmlString он не должен кодировать его.

вот код, который я использую в моей TemplateBase класс:

// Writes the results of expressions like: "@foo.Bar"
public virtual void Write(object value)
{
    if (value is IHtmlString)
        WriteLiteral(value);
    else
        WriteLiteral(AntiXssEncoder.HtmlEncode(value.ToString(), false));
}

// Writes literals like markup: "<p>Foo</p>"
public virtual void WriteLiteral(object value)
{
    Buffer.Append(value);
}

Я использую RazorEngine 3.8.2 и @Raw(Model.Content) работает отлично для меня.

построил обертку для RazorEngine, которая добавляет в поддержку @Html.Raw() и @Html.Partial()

https://github.com/b9chris/RazorEngineComplete

Я обнаружил, что все это работает со мной.

@{var myHtmlString = new HtmlString(res);}
@myHtmlString


  @MvcHtmlString.Create(res)

  @Html.Raw(res)

Comments

    Ничего не найдено.