2011-06-22 13 views
0

私は以下の問題があります。ビューで私はビューで受信した元のオブジェクトを格納し、その変更されたバージョン(ビュー内の元のオブジェクトを変更した後の結果)と比較する必要があるASP MVCにあります。ASP MVC 3:ユーザーがセッションを終了した後にセッションの有効期限が切れるようにする方法はありますか?

元のオブジェクトはビューにバインドされていないため(理由がないため、多くの非表示フィールドを作成する必要があるため)、セッションに保存しないと失われます。しかし、これは別の問題を引き起こす可能性があります。ユーザーが変更を保存するのではなくナビゲーションメニューからページを離れると、このオブジェクトは期限切れになるまでセッションに残ります。

答えて

0

元のオブジェクトをデータベースに保存し、ユーザーが更新されたバージョンを投稿したときに元のオブジェクトをそこから取得してみませんか?

4

あなたは「Windowsフォーム」や「Webフォーム」の方法で推論しようとしているようです。

したがって、オブジェクトに加えられた変更を検出する必要があります。これを達成するためのパターンはかなり単純です:

  • は、(それがある方)データストアからあなたのオブジェクトを取得し、あなたのオブジェクトを編集するためのフィールドを表示するビュー
  • に送信します。オブジェクトのIDを持つ単一の隠しフィールドを持つ。
  • アクションメソッドにデータを投稿します。 IDを使用してデータストアから元のオブジェクトを取得し、元のオブジェクトを投稿の新しい値で更新します。
  • データストアに対する変更を維持します。

ご覧のとおり、何もセッションに保存する必要はありません。役に立たないこと以外は、悪い習慣です。

+0

+1、それはまさに正しいパターンです。 –

+0

私はそれをやっていると思っていましたが、それはコレクションなので2回目にデータベースをヒットするのは好きではなかったし、100以上のレコードがあるとは思っていませんが、パフォーマンスに影響します。 – groovejet

+0

Webシナリオでは、すべてのデータベースコンテキストは短時間でなければなりません。長い生活のものを持っているのは悪い習慣です。あなたが少しGoogleの場合は、このトピックに関する情報の負荷を見つけることができます。あなたが気に入っているかどうかの問題ではありません。オブジェクトを取得し、接続を閉じて変更し、新しい接続で元のオブジェクトを取得して更新することをお勧めします。そして、テーブル全体を読む必要はありません。もしあなたがそれをしているなら、あなたは間違っています。作業しているオブジェクトのみを照会します。 –

0

なぜViewBagを使用しないのですか?あなたが特定の視野にいる限り、それは生きています。

関連する問題