Как вывести сырой HTML при использовании RazorEngine (НЕ из MVC) - PullRequest
96 голосов
/ 12 марта 2012

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

Ответы [ 6 ]

166 голосов
/ 12 марта 2012

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

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

@Raw(Model.EmailContent)
12 голосов
/ 14 мая 2013

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

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

3 голосов
/ 19 января 2018

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

2 голосов
/ 12 ноября 2013

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

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

https://github.com/b9chris/RazorEngineComplete

0 голосов
/ 28 июля 2016

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

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


  @MvcHtmlString.Create(res)

  @Html.Raw(res)
...