10

セッションとして1つのサイトを少なくしようとしていました。<sessionState mode="Off" /> だから私のweb.configに追加 します。その後実行すると

 Session["test"] = "yes"; 

「<em>オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます。これで結構です。

しかし、この構成で私は設定することができます

TempData["test"] = "yes"; 

コントローラでTempData["test"];、ビューページで印刷します。それはうまく機能しています。

MSDNによると、「TempDataプロパティ値はセッション状態で保存されます」。

<sessionState mode="Off" />では、 TempDataがどのように機能しているかについて言及するとどうでしょうか。ASP.NETはまだTempDataをセッションまたは他の場所に格納していますか?

4

1 に答える 1

17

これは、同じリクエスト中にビューで印刷している場合にのみ、無効なセッション状態で機能TempData["test"]します。したがって、この値は TempData ディクショナリから削除され、MVC はそれをセッション状態に保存しようとしません。ビューからそれを削除しようとすると、次のようになりますSystem.InvalidOperationException: The SessionStateTempDataProvider class requires session state to be enabled.

[SessionState(SessionStateBehavior.Disabled)]属性を追加するか、インターフェイスを使用して独自の TempData プロバイダーを実装することにより、コントローラーのセッション状態を個別に無効にすることができITempDataProviderます。

[編集] 最初のポイントを説明するために、2 つの状況を想像してみましょう。

  • 何らかの値を割り当てるコントローラーアクションとTempData["test"]、このアクションから返され、このデータを出力する対応するビューがあります。この場合、リクエスト間で保存する必要がないため、セッション状態がなくてもすべてが機能しTempData["test"]ます。
  • 何らかの値を割り当てるTempData["test"]が、このデータを出力する独自のビューを持つ別のアクションにユーザーをリダイレクトするコントローラー アクションがあります。この場合、MVC はTempData["test"]2 つのリクエスト間で値を保存する必要があるため、セッション状態を無効にすると機能しません。
于 2012-05-27T09:15:49.910 に答える