Как вывести 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, но мне нужно ее декодировать. Как я могу это сделать?
6 ответов:
RazorEngine, как и MVC Razor View Engine, будет автоматически кодировать значения, записанные в шаблон. Чтобы обойти это, мы ввели интерфейс под названием
IEncodedString, с реализациями по умолчаниюHtmlEncodedStringиRawString.чтобы использовать последний, просто позвоните во встроенный
RawметодTemplateBase:@Raw(Model.EmailContent)
к вашему сведению у меня есть вилка, которая включает в себя @Html.Необработанный.(..) синтаксис здесь:
если у вас есть специальный базовый класс для ваших шаблонов, вы можете код
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); }
Я обнаружил, что все это работает со мной.
@{var myHtmlString = new HtmlString(res);} @myHtmlString @MvcHtmlString.Create(res) @Html.Raw(res)
Comments