2009-08-13 14 views
3

私は、たくさんのフィールドを含み、リストも含むクライアントdtoを持っています。複雑なモデルのバインド

これで、簡単にバインドすることができ、彼のすべてのアドレスを持つクライアントが表示されます。問題は、ユーザーがアドレスを動的に削除して追加できることです。

私は各アドレスを取り囲むフォームを追加することを考えましたが、内部フォームで終わります。ブラウザはうまく動作しません。

次に、私はJavaScriptを使用することを考えましたが、アドレスが削除された場合は、すべてのアドレスを調べてインデックス(アドレス[0] .City)を変更する必要があります。アクションはClientFormをパラメータとして取ります。連続したインデックスを持ち、0から始まるアドレスのみがClientForm.Addressesリストに入ります。

実装が簡単なその他のソリューションはありますか?何か不足していますか?

答えて

1

フォームタグなしで各アドレスに異なる名前の送信ボタンを配置すると、外部フォームは特定のボタンが存在するかどうかを確認し、正しいアクションにリダイレクトできます(たとえば、アドレス番号1の編集、削除アドレス3など)

jqueryの検証を使用している場合は、すべての「子」送信ボタンのタイプが「キャンセル」に設定されている必要があります。

HTH、

ダンページ上の各アドレスはaddresses.Indexと呼ばれる隠しフォームフィールドを提供するために

+0

ない私はあなたが何を意味を理解しておくことにより、さらに詳細に記載されているこのソリューション:「あなたの外形はexistanceを確認することができます....」短い例では、素晴らしいことです。 – sirrocco

1

が、これは整数値をとります。 ASP.NET MVCモデルバインダー(バージョン2以上)は、addresses.Indexフォームフィールドの複数の値を受け取り、整数値を使用して、どちらの論理値が論理的に属しているかを決定します。

など。

addresses.Index = 0 
addresses.Index = 3 

は...

addresses[0].City 
addresses[0].Street 
addresses[3].City 
addresses[3].Street 

を探しに行くためにモデルバインダーを促し...と二つの要素を使用してコントローラのアクションでICollection<Address>を移入でしょう。

これらのレコードを削除してページに挿入できるのであれば、Javascriptはグローバル変数で使用する次のインデックスを追跡して、複数の行に同じインデックスを再利用しないようにする必要がありますアドレス要素などを保持するテーブルの長さに頼るだけです)。

Phil Haack here.

+0

インデックスは整数である必要はありません。私はちょうど整数であったIdのようなユニークな値を使用していました。そのようにして、彼らが一意にとどまっていることを確認するためにクライアントにインデックスを割り当てる必要はありませんでした。 – Benjamin