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>
出力されるメールはHTM1でエンコードされていますが、デコードする必要があります。どうすればこれを達成できますか?
RazorEngineは、MVCのRazor View Engineと同様に、テンプレートに書き込まれた値を自動的にエンコードします。これを回避するために、デフォルトの実装がIEncodedString
およびHtmlEncodedString
であるRawString
というインターフェイスを導入しました。
後者を使用するには、単にRaw
の組み込みTemplateBase
メソッドを呼び出します。
@Raw(Model.EmailContent)
参考までに、ここには@ Html.Raw(...)構文を含むフォークがあります。
私はRazorEngine 3.8.2を使用しており、@Raw(Model.Content)
は完全に正常に機能しています。
テンプレートのカスタム基本クラスがある場合、通常のMVCテンプレートと同様に動作するようにWrite
メソッドをコーディングできます。出力値が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);
}
@Html.Raw()
および@Html.Partial()
のサポートを追加するRazorEngineのラッパーを構築しました