2009-07-08 4 views
0

ユーザーが自分のアカウントにアドレスを追加できるセクションがあります。彼らは必要な数(船積み、請求書など)を追加することができます。.NET MVC同じバージョンの複数のバージョンが1つのビューに表示される

住所を追加した後、ユーザーは更新フォームに「保存」と「削除」ボタンが表示されるように設定します。ユーザーは、追加したアドレスのいずれかを調整できます。

私が抱えている問題は、検証によるものです。 Line 1が必要であるとします。 3つのアドレスのうち2番目のアドレスを更新して、1行目を空のままにしておくと、コントローラはエラーを発生させます(Nerd Dinner、BTWと同じ手法を使用します)。これはいい。悪い点は、ビューに表示されているすべてのアドレスのすべてのアドレス情報が、エラーが発生したアドレスからの値として表示されることです。

次のようにフォームデータが設定されると、私は、これはモデルバインディングとは何かを持って知っているが、私は混乱しています:

<%= Html.TextBox("Line1", Model.Address.Line1)%> 

に渡されたモデルたちがいるアドレスに固有のものですクライアントのアドレスのリストに表示されます。 "Model.Addres.Line1"の値がModelState ModelErrorsコレクションのデータによってオーバーライドされる理由がわかりません。私はデフォルトの動作は、エラーコレクションからの値を使用することだと思います。これは、ビューに複数のフォームがあり、フォームが他のフォームのそれぞれと同じ名前を入力フィールドに使用している場合の問題です。

私の唯一の回避策はここでHTMLヘルパー機能を有効にし、HTMLで入力をハードコードすることですか?

答えて

0

あなたが間違っている場合は私を修正しますが、3つのアドレスのすべてが同じフォームの同じフィールド名を持つように聞こえますか?もしそうなら、検証メッセージだけよりも大きな問題があります。

にかかわらず(あなたが別のフォームを使用している場合でも)、私はあなたがアドレスIDとフィールド名を序文を示唆している:

<%= Html.TextBox("Address" + Model.Address.ID + ".Line1", Model.Address.Line1)%> 

あなたは、メソッドのパラメータに(自動的にバインドすることができません。 )、しかし、あなたはのUpdateModel()を使用することができますし、私は、フォーム(S)上のHTMLヘルパー・メソッドを取り除くことで、これを解決

"Address" + Address.ID 
+0

アドレスごとに別々のフォームがあります。私が一意のIDでフィールド名を前書きするならば、私はモデルのバインディングを失うので、コントローラの更新が必要です。ところで、検証エラーがなければ更新は成功です。私は、エラーが発生した場合にのみ問題に取り組んでいます。 – mikerennick

+0

はい、自動モデル結合が失われます。それを保持したい場合、3つのモデルバインディング(2つは常にヌルになります)が必要です。バインディングの接頭辞オプションもあります。 また、次の2つのことができます。 a)送信されたフォームのvalidationMessage()のみを表示します。送信されていないアドレスに対してはvalidationMessage()を呼び出さないでください。しかし、このビューはやや乱雑です。 b)Html.TextBox()は同じですが、ValidationMessage()にのみプレフィックスを追加します。ビューステートで検証エラーの名前を変更するには、コントローラで何かを実行します。また乱雑です。 –

0

にプレフィックスを設定します。誰かがヘルパーメソッドを保つ手段を見たら、私に知らせてください。

+0

上記の投稿が解決策で更新されたことをちょうど見た。私はUpdateModelメソッドの接頭辞オプションを認識していませんでした。ありがとう。 – mikerennick

関連する問題