2009-05-31 9 views
2

私はHtml.TextBox()のようなフィールドが2つの値を受け入れることを理解しています。最初のものは名前で、2つ目は値です。 Html.TextArea()も同様です。しかし、フォームがAJAXとして送信され、フォームが置かれているdivがサーバーからのビューに置き換えられた場合、フォームフィールドは以前の値を取ることを主張します。画像は千の言葉の価値がある:私は、コントローラとモデル上のすべてをチェックしたASP.Net MVCのフォームフィールドはどこから値を取得しますか?

image http://img132.imageshack.us/img132/4171/aspnetmvcbug.png

と画像はビュー自体をデバッグするからです。モデルは空ですが、モデルから生成されたフィールドは以前の送信の値をとります。

答えて

3

ポストバックデータは、ModelStateに保持されます。組み込みのHtmlHelperメソッドは、コンテンツのレンダリング時にフォーム要素の名前に基づいてモデル状態に格納された値を検索します。

+0

ああ!だから私はリダイレクトするので、AJAXを使用しないときはモデルの状態はきれいです。メソッドが成功したときにModelState.Clear()を追加すると固定されます。それが私がModelStateを破壊する方法なのでしょうか? – Pablo

+0

ModelState.Clear()は使用するのが大丈夫です - 私はコード内のいくつかの場所で使用します。 ModelStateからの検証メッセージ、およびポストバック前のフォームの値はクリアされますが、実際に問題がないと思っている限り、それをクリアします。 –

0

エントリがありますかViewData ["Body"]? MVCは、名前に基づいてViewData項目にコントロールをバインドしようとします。

+0

ViewDataに本文がありません。ありがとう。 – Pablo

2

View.ModelStateプロパティを確認します。フォームは特定の状況でそこから値を取得できます。

+1

はい、問題はModelStateにありました。 ModelState.Clean()を実行すると問題が解決するようですが、そのプロセスでModelStateを破棄しているかどうかはわかりません。 – Pablo

関連する問題