我正在尝试生成包含HTML内容的电子邮件。 该内容已经过卫生处理,因此在这方面我并不担心,但是当我致电:
Razor.Parse(template, model);
在以下Razor模板上:
@(new System.Web.HtmlString(Model.EmailContent))
输出的电子邮件经过HTM1编码,但我需要对其进行解码。 我该怎么做?
我回答了这个问题,但是由于我在这里回答了它,所以它被删除了,因为它是重复的回答:stackoverflow.com/questions/23603593/ ...这个答案对MVC和RazorEngine都适用。
与MVC的Razor View Engine一样,RazorEngine将自动对写入模板的值进行编码。为了解决这个问题,我们引入了一个名为IEncodedString的接口,默认实现为HtmlEncodedString和RawString。
要使用后者,只需调用TemplateBase的内置Raw方法:
@Raw(Model.EmailContent)
优秀的工作!谢谢
谢谢!你救了我的一天!
也拯救了我的一天!
@Matthew很抱歉要恢复,但是即使可以编译,它在VS HTML编辑器中看起来也不漂亮,它不再能够识别Model或Raw。任何解决方法?
@Jeff Im认为正确的方法是RazorEngine公开具有静态方法.Raw的静态类Html.cs,以便它将处理对Html.Raw的标准调用,这些调用可用于在VS Razor编辑器中获取正确的语法突出显示。
@Manfred @Raw()在RazorEngine中工作正常(不是ASP.NET MVC Razor;))
希望也解决这个问题。这将导致整个项目无法在启用MvcBuildViews的情况下进行构建...
" HtmlEncodedString"不起作用!而是使用:RawString。查看有效的示例!公共RazorEngine.Text.IEncodedString GetMarcaFinalDocumento(){返回新的RazorEngine.Text.RawString("嗨!");}
仅供参考,我有一个包含@ Html.Raw(...)语法的派生:
https://github.com/Antaris/RazorEngine/pull/105
@ Html.Raw()不需要任何前期配置。好的解决方案。
我正在使用RazorEngine 3.8.2,@Raw(Model.Content)对于我来说工作正常。
如果您的模板具有自定义基类,则可以对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:"
Foo
public virtual void WriteLiteral(object value)
{
Buffer.Append(value);
}
为RazorEngine构建了包装器,增加了对@Html.Raw()和@Html.Partial()的支持
https://github.com/b9chris/RazorEngineComplete
我发现所有这些都与我合作。
@{var myHtmlString = new HtmlString(res);}
@myHtmlString
@MvcHtmlString.Create(res)
@Html.Raw(res)
您正在使用剃刀引擎无法提供的MVC库,因此这不是问题的答案。