2012-02-22 18 views
1

セッションはもはやASP MVCのデータを保存するための推奨方法ではなく、ViewData(コントローラからViewへ)とTempData(1つのポストバックのみ)に移行する必要があることを学びました。私たちがSessionを使用すべきでない唯一の理由は、Testabilityを維持することです(MVCはTDDをサポートするため、TestMethodsの実行中にHTTPContext.Sessionが解決されません)。ASPのセッションMVC

しかし、Sessionsによって広く解決された目的は、ViewDataまたはTempDataによって解決されません。セッションは、ユーザーセッション全体のコンテキストを保存します。

MVCで正しい推奨事項と代替案を収集することができません。私は正しい絵を理解するのが間違っているかもしれません。私は議論へのリンクやあなたからの提案を感謝します。

これは、WebFormsで使用されている目的のためにSessionを使用して決定するのに役立ちます。または、現在のアプリケーションを再構築して、Session only with mandatoryと一緒に行くことができます。

おかげ Sumeet

+1

ASP.NET Webフォームでセッション* *を使用した場合(つまり、セッション全体のスコープで*セッションユーザー*に関するアプリケーションごとのセッション情報を格納し、アプリケーションの機能に関連するデータではない場合) ASP.NET MVCでも同じように行う必要があります。しかし、あなたがASP.NET Webフォームでセッションを使用していたのは、ASP.NET MVCが(あなたが書いているように)他のメカニズムを持っているもののための一般的な記憶域であるということです。 – bzlm

答えて

3

セッションはまだMVCでwidely in useです。

あなたのコードをよりテスト可能にするために、Sessionに抽象化(例えばInterface)を提供してコントローラに注入することができます。コントローラに模擬またはスタブされた 'セッション'を提供できます。

しかし、ViewModelまたはViewDataを使用してビューと通信することに固執します。つまり、ビューはSessionに直接アクセスしてはいけません。

+1

+1私は同じことを書こうとしていました。私はまだASP.NET MVCアプリでセッションを利用しています。例えばMVCアプリケーションのさまざまなセクション(この場合はドロップダウンリストの値を選択したもの)のユーザーのフィルタ設定を永続化して、アプリケーションのそのセクションに戻ったときにフィルタが同じになるようにしなければなりませんでした。セッションを使用すると、これを行う最も簡単な方法が提供されました。 –

+1

@Dommerパフォーマンスに問題がなければ、セッションに問題はありません。私は完全にノンのポイントに同意しますが、抽象化を通して作業しています。私はViewBag/ViewDataから離れる傾向があります:http://completedevelopment.blogspot.com/2011/12/stop-using-viewbag-in-most-places.html –

+0

はい私はViewBag/ViewDataを使ったことがありませんあなたと同じ理由。私は前にあなたのブログを見たことがなかった、私たちが同じことをたくさん話し合ったり、同意したりすることができるように見える... ;-) –