2009-04-17 19 views
21

私はasp.net mvcアプリケーションの異なるステップでオブジェクトを構築したいと思います。それぞれのステップは別のページになります。簡単なWeb.FormsアプリケーションでSessionに保存するもの。Asp.Net MVCとセッション

セッションについては、セッションが何か非常にasp.net MVC'ishと思われません。しかし、TempDataとViewDataがどちらにも合わないようなので、私は本当にこの状況の他の選択肢について考えることはできません。多分私は間違っています。

もちろん、私は4つのステップを1ページに入れて表示/非表示にすることができますが、これは私の質問ではありません。この種のマルチステップ問題のための良い方法である場合や、他の方法でそれを行う傾向がある場合は、MVCのセッションについてのあなたの意見を聞きたいと思います。

これは、セッションにアクセスする方法を探していない点を除いて、質問Session variables in ASP.NET MVCと非常によく似ていますが、それがこのような問題を解決する最善の方法である場合は、Asp.Net MVC 。事前

答えて

20

SessionにはMVCがありません.Webの重要な部分であり、ほとんどのサイトで何らかの方法で使用しています。あなたには本当に2つの主要な選択肢があります。オブジェクトをページ間でデータベースに格納する(不完全なオブジェクトを保存することを意味する)か、セッションに挿入します。どちらにも長所と短所があります。

セッションでは、データベースに部分的なオブジェクトを保存する必要はありませんが、ユーザーが離れるかセッションがタイムアウトすると、すべての情報が失われます。また、ユーザーあたりのメモリフットプリントが大きくなり、スケーリングになると他の問題が発生します。 (これらのすべては、ロードバランサまたはセントラルセッションストアでスティッキセッションを使用して解決できます)。

データベースの方法は多くの点で優れていますが、通常、不完全なオブジェクトをデータベースに保存したくない場合、別のテーブルを作成してそのテーブルにシリアル化されたオブジェクトを保存することが妥協です。あなたの実際のテーブルを通過しないので、データベースの制約を妥協する必要はありません。 (あなたはまた、基本的に同じことをやっているデータベースにセッションデータを保存することができます)

最後に、私は2つの方法の間に判断を呼び、私は両方の年を使いました。

+0

私はあなたに同意しませんが、固定セッションまたは中央セッション状態が両方ともスケーラビリティの悪いニュースであることに注意してください。もちろん、規模を拡大することは可能ですが、それは人生を困難にします。セッションの状態を避けることができれば、スケーラビリティの話ははるかに良いです - これがOPの慎重さの理由でしょうか? –

+4

どのようにハードを定義しますか?私はこの方法を使っていくつかのシステムを拡張し、問題にぶつからなかった。セッションを完全に回避することは非常に難しく、特にログインしたユーザーなどになると –

1

おかげで、あなたは<%= Html.HiddenField(...) %>を試みたことがありますか?

+0

""のhtmlヘルパーを意味しますか?私は単純な値を格納することしかできませんでした。複雑なオブジェクトを格納して移入する必要があります – antonioh

+0

http://stackoverflow.com/questions/669492/asp-net-mvc-is-there-a-way-to-simulate-a -viewstate/669495#669495 –

+0

ありがとうございましたが、それは私が探していたものではありません。私は標準的な良いプラクティスを探しています。しかしそれはいい考えです。 – antonioh

2

TempDataを使用してビュー間を渡すことはできますが、後続のビューを渡す必要があります。これは後続のリクエストで消費されることを意図していますが、同じデータを一時データに戻す次のリクエストに一時データを渡すことができないと言っているわけではありません。

関連する問題