ユーザーが自分のアカウントにアドレスを追加できるセクションがあります。彼らは必要な数(船積み、請求書など)を追加することができます。.NET MVC同じバージョンの複数のバージョンが1つのビューに表示される
住所を追加した後、ユーザーは更新フォームに「保存」と「削除」ボタンが表示されるように設定します。ユーザーは、追加したアドレスのいずれかを調整できます。
私が抱えている問題は、検証によるものです。 Line 1が必要であるとします。 3つのアドレスのうち2番目のアドレスを更新して、1行目を空のままにしておくと、コントローラはエラーを発生させます(Nerd Dinner、BTWと同じ手法を使用します)。これはいい。悪い点は、ビューに表示されているすべてのアドレスのすべてのアドレス情報が、エラーが発生したアドレスからの値として表示されることです。
次のようにフォームデータが設定されると、私は、これはモデルバインディングとは何かを持って知っているが、私は混乱しています:
<%= Html.TextBox("Line1", Model.Address.Line1)%>
に渡されたモデルたちがいるアドレスに固有のものですクライアントのアドレスのリストに表示されます。 "Model.Addres.Line1"の値がModelState ModelErrorsコレクションのデータによってオーバーライドされる理由がわかりません。私はデフォルトの動作は、エラーコレクションからの値を使用することだと思います。これは、ビューに複数のフォームがあり、フォームが他のフォームのそれぞれと同じ名前を入力フィールドに使用している場合の問題です。
私の唯一の回避策はここでHTMLヘルパー機能を有効にし、HTMLで入力をハードコードすることですか?
アドレスごとに別々のフォームがあります。私が一意のIDでフィールド名を前書きするならば、私はモデルのバインディングを失うので、コントローラの更新が必要です。ところで、検証エラーがなければ更新は成功です。私は、エラーが発生した場合にのみ問題に取り組んでいます。 – mikerennick
はい、自動モデル結合が失われます。それを保持したい場合、3つのモデルバインディング(2つは常にヌルになります)が必要です。バインディングの接頭辞オプションもあります。 また、次の2つのことができます。 a)送信されたフォームのvalidationMessage()のみを表示します。送信されていないアドレスに対してはvalidationMessage()を呼び出さないでください。しかし、このビューはやや乱雑です。 b)Html.TextBox()は同じですが、ValidationMessage()にのみプレフィックスを追加します。ビューステートで検証エラーの名前を変更するには、コントローラで何かを実行します。また乱雑です。 –