2009-07-23 17 views
3

MVCContribグリッドの内容は、厳密に型指定されたビューのモデルから取得されます。ポストが作成されると、グリッドの内容はコントローラに戻ったときにモデルオブジェクトに表示されません。グリッドはセル内にテキストを含む単なる表としてレンダリングするため、これがわかります。ポストが発生したときに私がグリッドに送ったリストデータがポストに戻ってくるような何かがありますか?MVCContribグリッドとモデルバインダーを使用したポストバック

答えて

2

TempDataを使用して、この情報サーバー側を保持することができます。 TempDataの情報は、1つの要求に対して保持されます。私はこのオプションが本当に好きではありません。

モデルをデータベースから再作成できませんか?ユーザーが情報を変更していない場合は、なぜ同じ変更されていない情報をすべてポストバックする必要がありますか?あなたが以前に持っていたところからもう一度それをつかんでください。

+0

あなたはそうです。それはオプションです。ちょうど私が送った状態でモデルを戻すことができるはずです。しかし、それはフォーム提出のためのものであり、mvccontribは "フォーム"コントロールをレンダリングしません。 – jlembke

1

グリッドにシリアライズされたモデルを再作成する場合は、グリッド内(またはグリッド外)に正しく名前のフォーム要素を埋め込む必要があります。あなたのモデルを再現したいアクションにポストバックしています。

これは実行可能ですが、基本的には__VIEWSTATEを再作成しています。これはMVCを使って作業することの喜びを打ち消してしまいます(「醜いハックだから、IDEをアンインストールして考えてください」)。

あなたが解決しようとしているシナリオをよりよく理解していなければ、正しい方向に向けるのは難しいです。これらの状況では通常のワークフローでは、モデル

  1. 取得ページ
  2. に 形式のモデルへの変更は、アクションに変更を送信ページに
  3. レコードを生成し得る ですモデル再び
  4. モデル
にポストからの変更を永続化する
  • 使用TryUpdate

    パフォーマンス上の問題を抱えている場合(perf問題が発生していることが証明されていますか?途中で最適化されていないのですか?)、MVCを実際には存在しないように曲げるのではなく、発生する場所(データアクセスのキャッシュ)に対処してください。