2012-04-17 21 views
4

リクエスト間でTempDataを使用せずにMVC Razorでデータを永続化するにはどうすればよいですか?リクエスト間でTempDataを使用せずにMVC Razorのデータを永続化する

thisのTempDataを使用できるのはわかりますが、マシンに状態を作成するときにTempDataを使用したくない場合があります。

おかげで、アニッシュ

編集:私は、ユーザーがなど名前、年齢

FIXなどのフィールドをソートするために許可されているビューのページで、前のソート方向を持続したい:私は使用してそれを修正ViewBag。以前のソートフィールド/方向は、ViewBagを使用してView from Controllerに送信され、次のクリックでクエリ文字列として戻されます。

いいえFIX:以前のソートフィールドと以前のソートディレクトリをチェックして設定するなど、.jsファイルのすべてを処理しました。

これは私が最後にしたものです。 ViewBagを使用してViewPageに以前の詳細を送信し、現在のユーザーアクションに基づいて.jsで検証を行い、フォームデータでコントローラに戻しました。

答えて

3

クライアントページの状態を維持することは、ステートレスなHTTPの概念を破っているものです。なぜあなたは州を維持したいのですか?あなたのコントローラのアクションから対応するビューにいくつかのデータを渡すためのいくつかのソリューションを探している場合は、ドロップダウンのデータを入力し、そのViewModelオブジェクトを厳密に型指定されたビューに送るViewModelを使うことをお勧めします。あなたはそこであなたのデータを利用できるようになります。また、いくつかのデータが必要な場合は、すべてのリクエストでDataLayer(テーブル/またはCacheなどから)からデータを取得する必要があります。 クエリ文字列に関連するIDを渡して、対応するデータを取得することができます。

前述のように、一部のデータをセッションに保存することができます。それは、そのセッションの生涯に至るまで、全ページにわたって利用可能になります。

+0

いいえ状態を作成するのではなく、要求間でデータを保持したい(コントローラからビューにではなく)。ユーザーが以前にクリックしたフィールドを知りたいとします。 – ary

+1

これは私が最終的にしたものです。 ViewBagを使用してViewPageに以前の詳細を送信し、現在のユーザーアクションに基づいて.jsで検証を行い、フォームデータでコントローラに戻しました。 – ary

3

私は最近ASP.NET MVC 3の多くを行っていませんが、リクエストごとにデータを保持できる唯一の方法は、セッション状態、Cookie、またはリクエストごとにサーバーにデータを投稿することです。

ViewData、ViewBag、およびTempDataはすべて、クライアントのブラウザからの情報に基づいて、すべての要求の開始時にセッション状態、Cookie、およびポストデータを利用できるようになります。

どのようなシナリオでデータを保持しようとしていますか?

+0

ユーザーが名前、年齢などのフィールドを並べ替えることができるビューページで前の並べ替え方向を維持したい... – ary

+0

これを永久に実行する場合(つまり、ユーザーがページを離れて戻ってきた場合でも) )私はクッキーをお勧めしたい、そうでなければこれはあなたが州に保管できるものです。並べ替えデータを文字列にシリアル化し、各ページの読み込み時に逆シリアル化してデータに再度アクセスする必要があります。 – RTigger

1

リダイレクト時にこれらの値をクエリ文字列パラメータとして渡すことができます。

1

フォームを投稿すると、非表示の入力フィールドにパラメータを設定できます。しかし、HTTPGETでアクションを呼び出す場合は、QueryStringパラメータを使用して値を渡すことができます。

関連する問題