it-swarm.com.ru

Как вывести сырой HTML при использовании RazorEngine (НЕ из MVC)

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

Razor.Parse(template, model);

на следующем шаблоне Razor:

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

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

93
KallDrexx

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

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

@Raw(Model.EmailContent)
162
Matthew Abbott

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

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

12
Tod Thomson

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

3
curious.netter

Если у вас есть собственный базовый класс для ваших шаблонов, вы можете кодировать метод 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);
}
2
Iravanchi

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

https://github.com/b9chris/RazorEngineComplete

0
Chris Moschini