2011-01-11 6 views
8

一般的なMVCフローの外でRazorを使用しています。私たちのRazorビューは、C#拡張を介してXSLトランスフォーム内から呼び出されます。 Razorビューの出力は文字列としてxslトランスフォームに返されます。場合によっては、Razorビューの結果をxsl変数に取り込み、モデルに戻して別のRazorビューでデータとして消費させることがあります。これが起こると、最初にRazorによって二度エンコードされた最初のビュー、xslトランスフォームを介した二度目のビューが完成します。 Razorを実行するには、出力をエンコードする必要がありません。Razorビュー全体でHTMLエンコーディングを無効にする方法

これは可能ですか?私たちはどうやってそれについて行きますか?

+2

ない完全な答えていますが、@を使用することができます(新しいですHtmlString(Model.Something))または@ Html.Raw(Model.Something)を使用してエンコードをバイパスします。 – jhexp

+0

ありがとうございます。私はビュー内で利用可能なエンコーディング機能を使用することに満足しています。この場合、ビューエンジンの出力を別のプロセスに返すので、ビュー全体でエンジンが実行するエンコーディングを防ぐ必要があります。ビューにエンコードされたデータを埋め込むだけでなく、私はこれが標準的な実装ではないことを理解しています。私たちの場合、私たちが近代化しようとしている多くの後方互換性制約を持つレガシーシステムがあります。成功すれば、この方法でRazorを使用すると、1〜2年以上MVCに移行できます。しかし、入力をありがとう。 – gidmanma

答えて

14

あなたの全体のビューでエンコーディングを無効にしたいので、あなたの最善の策はそうWebPageBaseから継承する独自のビューの基本クラスを作成するには(そして、あなたの意見はあなたの新しいタイプを指定する@inheritsを使用する必要があります)とWrite(object value)メソッドをオーバーライドだろうその代わりにWriteLiteral()が呼び出されます。そうすれば、出力はエンコードされません。

+0

marcindありがとう - 私はあなたがチャイムに入ることを望んでいました。 – gidmanma

5

さらにanswer aboveあなたがそうのようにこれを達成するであろう:

public abstract class TextBasedViewPage : System.Web.Mvc.WebViewPage 
{ 
    public override void Write(object value) 
    { 
     WriteLiteral(value); 
    } 
} 

public abstract class TextBasedViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel> 
{ 
    public override void Write(object value) 
    { 
     WriteLiteral(value); 
    } 
} 

次に、あなたのビューであなたと出て起動できます。

@inherits MyNamespace.TextBasedViewPage<MyModelNamespace.Model>