14

HttpContext.Current.Items[...]データを に保存するのと にデータを保存するのは、どちらが適切ViewData[...]ですか?

このコレクションにデータを保存するためのベスト プラクティスを見つけようとしていますが、ユーザー固有のデータを に保存しても安全かどうかわかりませんHttpContext.Current.Items

ユースケースの 1 つは、ベース コントローラからユーザー クレジットを渡し、計算と での表示にOnActionExecuting(...)使用することです。これを使用する必要があることはわかっていますが、ネストされた部分ビューで一貫性のない結果が得られました。ControllerViewsViewData

HttpContext.Current.Items[...]to Controllerslike ViewData[...]is to Viewsと言うのは正しいでしょうか?

4

1 に答える 1

21

HttpContext.Current.Itemsリクエストの期間中のみ持続しますが、そのリクエストのすべてにグローバルです。

セッションは明らかにユーザーのセッション全体で持続し、リクエスト間で持続します。

これらの基準のみに基づいて、どれを使用する必要があるかを判断できるはずです。使用HttpContext.Current.Itemsは、一種の「グローバル変数」になる傾向があり、魔法のキー文字列が関与する傾向があるため、お勧めするものではありませんが、実際に使用する必要がある場合もあります。

さらに、.Items と ViewData の比較はかなり適切ですが、.Items は ViewData の動作とは異なります。これは、要求に関係するすべてのビュー (部分的またはその他) が独自の ViewData のコピーを取得するためです。

RenderPartialaを実行して ViewData に何かを追加しようとすると、動作の違いは明らかです。親ビューに戻ると、アイテムはそこにありません。

于 2010-04-06T18:55:19.313 に答える