Как выводить raw 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, но мне нужно его декодировать. Как я могу это сделать?

83
12 марта '12 в 5:49
источник поделиться
4 ответов

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

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

@Raw(Model.EmailContent)
148
12 марта '12 в 19:39
источник

FYI У меня есть вилка, которая включает синтаксис @Html.Raw(...) здесь:

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

9
14 мая '13 в 4:47
источник

Если у вас есть собственный базовый класс для ваших шаблонов, вы можете закодировать метод 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
12 нояб. '13 в 13:58
источник

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

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


  @MvcHtmlString.Create(res)

  @Html.Raw(res)
0
28 июля '16 в 5:42
источник

Посмотрите другие вопросы по меткам или Задайте вопрос