2011-12-25 8 views
1

、応答ヘッダは、次のように設定されている:レンダリングされたビューでレスポンスヘッダは、ビューで消失ASPコントローラのアクションの純MVC

HttpContext.Response.AddHeader("key", "value"); 

、Response.Headers [「キー」]はヌルであると思われます(ajaxリクエストではbtw、ヘッダは設定され、問題なく検索されます)。何か特別な理由はありますか、これは私のコードにはばかげたバグですか?

答えて

3

応答ヘッダーのみを追加できますが、IIS 7統合パイプラインモードで実行している場合を除き、読み取ることはできません。標準モデルで実行している場合HTTPレスポンスヘッダーはコードで読み込もうとするまでに後の段階で送信されます。これはdocumentationに記載されています:

ヘッダプロパティはのみIIS 7.0に統合 パイプラインモードと、少なくとも.NET Frameworkの3.0でサポートされています。 ヘッダープロパティにアクセスしようとしたときに、これらの2つの条件のいずれかが と一致しない場合は、PlatformNotSupportedExceptionがスローされます。

これは、ビューがアクセスする必要があるのはすべて、応答ヘッダーではなくビューモデルであるということです。したがって、コントローラのアクションでは、ビューに必要なすべての情報を含むビューモデルを作成し、それをビューに渡して消費します。覚えておいてください:ビューはデータを取得しません。ビューは、ビューモデルの形式でコントローラから処理されているデータを使用します。

+0

はあなたにもViewBag内のデータを隠しておくことができます – rovsen

+0

どうもありがとうございました。ビューモデルに入る必要はありません。 – RickAndMSFT

+0

@ RickAnderson-MSFT、いいえ、私のためにViewDataはうんざりです。私は決してそれを使用しません。それは弱く型付けされている、それは魔法の文字列に依存している、それはコンパイル時の安全性を強制することはできません、ビューは非常に醜いので、あなたがそれをキャストする必要が実際のプロパティにアクセスするため...ビュー*これをゴミ箱に投げ込むようなものです。 ViewBag/ViewCarp。ビューモデルはASP.NET MVCを私にとっては唯一の方法です。暴動のために申し訳ありませんが、私の個人的な意見やものを行う方法。 –

1

コントローラからビューにいくつかのデータを渡そうとしているようです。そのような場合は、代わりにViewDataまたはViewBagを使用してください。お使いのコントローラで

:あなたのビューで

ViewData["key"] = "value"; 

<span>Your key: @ViewData["key"]</span> 
+0

MVC 3+では、ViewDataの代わりにViewBagを使用します。["key" = – RickAndMSFT

関連する問題