如何使用RazorEngine(不是从MVC)输出原始html
我正在尝试生成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编码,但我需要解码。 我怎样才能做到这一点?
与MVC的Razor View Engine一样,RazorEngine将自动编写写入模板的值。 为了解决这个问题,我们引入了一个名为IEncodedString
的接口,默认的实现是HtmlEncodedString
和RawString
。
要使用后者,只需调用TemplateBase
的内置Raw
方法:
@Raw(Model.EmailContent)
仅供参考我有一个叉包括@ Html.Raw(…)语法在这里:
如果你的模板有一个自定义的基类,你可以编写Write
方法来performance类似于正常的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)