我正在尝试使用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编码的,但我需要它解码。我怎么能做到这一点?
答案 0 :(得分:165)
RazorEngine与MVC的Razor View Engine一样,会自动编码写入模板的值。为了解决这个问题,我们引入了一个名为IEncodedString
的接口,其默认实现为HtmlEncodedString
和RawString
。
要使用后者,只需调用Raw
的内置TemplateBase
方法:
@Raw(Model.EmailContent)
答案 1 :(得分:12)
仅供参考我有一个包含@ Html.Raw(...)语法的fork:
答案 2 :(得分:3)
我正在使用RazorEngine 3.8.2,@Raw(Model.Content)
对我来说非常合适。
答案 3 :(得分:2)
如果您有模板的自定义基类,则可以将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);
}
答案 4 :(得分:0)
为RazorEngine构建了一个包装器,增加了对@Html.Raw()
和@Html.Partial()
的支持
答案 5 :(得分:-1)
我发现所有这些都与我合作。
@{var myHtmlString = new HtmlString(res);}
@myHtmlString
@MvcHtmlString.Create(res)
@Html.Raw(res)