長々と申し訳ありませんが、写真は 1000 語に匹敵します。
ASP.NET MVC 2 では、入力フォーム フィールドの "name" 属性には、ポストバック時にオブジェクトをバインドするために、C# でオブジェクトを参照するために使用する以下の構文が正確に含まれている必要があります。つまり、複数の OrderLines を持つ複数の Orders を含む次のようなオブジェクトがある場合、名前は次のように表示され、適切に機能します (大文字と小文字が区別されます)。
これは機能します:
Order[0].id
Order[0].orderDate
Order[0].Customer.name
Order[0].Customer.Address
Order[0].OrderLine[0].itemID // first order line
Order[0].OrderLine[0].description
Order[0].OrderLine[0].qty
Order[0].OrderLine[0].price
Order[0].OrderLine[1].itemID // second order line, same names
Order[0].OrderLine[1].description
Order[0].OrderLine[1].qty
Order[0].OrderLine[1].price
ただし、クライアント ブラウザで注文明細を追加したり、注文明細を削除したりしたいと考えています。 どうやら、インデックスはゼロから始まり、N までの連続するすべてのインデックス番号を含む必要があります。
黒帯の忍者である Phil Haack のブログ エントリ(こちら)では、[0] インデックスを削除する方法、重複する名前を使用する方法、および [0] 表記を使用して重複する名前を MVC に自動列挙させる方法について説明しています。ただし、ネストされたオブジェクトを使用してこれをバインドし直すことができませんでした:
これは失敗します:
Order.id // Duplicate names should enumerate at 0 .. N
Order.orderDate
Order.Customer.name
Order.Customer.Address
Order.OrderLine.itemID // And likewise for nested properties?
Order.OrderLine.description
Order.OrderLine.qty
Order.OrderLine.price
Order.OrderLine.itemID
Order.OrderLine.description
Order.OrderLine.qty
Order.OrderLine.price
投稿時にネストされたViewModelをバインドするためにこれがどのように機能するかを説明するアドバイスはまだ見つけていません。 IList でネストされたバインドを行うために必要な正確な名前の既存のコード例または厳密な例へのリンクはありますか?
スティーブ・サンダーソンは、この種のことを行うコードをここに持っていますが、これをネストされたオブジェクトにバインドすることはできないようです。[0]..[n] AND が番号付けで連続していないものは、単純に戻りオブジェクトから削除されます。
何か案は?