RazorEngine(MVCではない)を使用しているときに未加工のhtmlを出力する方法


105

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エンコードされていますが、デコードする必要があります。どうすればこれを達成できますか?


私はこれに答えましたが、stackoverflow.com / questions / 23603593 /…...この答えはMVCとRazorEngineの両方で機能するため、重複した答えとして削除されました。
ブライアンライス

回答:


181

MVCのRazor View EngineのようなRazorEngineは、テンプレートに書き込まれた値を自動的にエンコードします。これを回避するためにIEncodedString、と呼ばれるインターフェースを導入しました。デフォルトの実装はHtmlEncodedStringおよびRawStringです。

後者を使用するには、次の組み込みRawメソッドを呼び出すだけですTemplateBase

@Raw(Model.EmailContent)

4
@Matthew復活して申し訳ありませんが、これはコンパイルされますが、VS HTMLエディタではきれいに見えません。ModelまたはRawを認識しなくなります。回避策はありますか?
ジェフ

5
@Jeff私は正しいアプローチは、RazorEngineが静的メソッド.Rawを持つ静的クラスHtml.csを公開して、VS Razorで正しい構文強調表示を取得するために使用できるHtml.Rawへの標準呼び出しを処理することだと思います編集者。
Tod Thomson

8
@Manfred @Raw()はRazorEngineで正常に動作します(ASP.NET MVCのRazorではありません;))
Jeff

これも解決したいと思います。これにより、プロジェクト全体がMvcBuildViewsを有効にしてビルドされなくなります...
guidupuy 2013年

2
「HtmlEncodedString」は機能しません!代わりに、RawStringを使用してください。うまくいく例を見てください!public RazorEngine.Text.IEncodedString GetMarcaFinalDocumento(){return new RazorEngine.Text.RawString( "<div> Hi there!</ div>");}
Charles


3

テンプレート用のカスタム基本クラスがある場合、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);
}

3

私はRazorEngine 3.8.2を使用しており、@Raw(Model.Content)完全に問題なく動作しています。



-1

私はこれらのすべてが私と一緒に働いたことを発見しました。

@{var myHtmlString = new HtmlString(res);}
@myHtmlString


  @MvcHtmlString.Create(res)

  @Html.Raw(res)

4
かみそりエンジンから利用できないMVCライブラリを使用しているため、これは質問に対する回答ではありません。
オリゴフレン2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.