Извините за длину, но картинка стоит 1000 слов:
В ASP.NET MVC 2 атрибут поля name в форме ввода должен содержать именно такой синтаксис, который вы использовали бы для ссылки наобъект в C # для того, чтобы связать его обратно с объектом после отправки обратно.Тем не менее, если у вас есть объект, подобный следующему, где он содержит несколько заказов, имеющих несколько строк заказов, имена будут выглядеть и работать так (с учетом регистра):
Это работает:
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.
Чёрный пояс ниндзя. Запись в блоге Фила Хаака здесь объясняет, как удалить индекс [0], иметь повторяющиеся имена и позволить MVC автоматически перечислять повторяющиеся имена с помощью [0] обозначение.Однако мне не удалось заставить это выполнить привязку с помощью вложенного объекта:
Это не удалось:
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
Я еще не нашел никаких рекомендацийэто описывает, как это работает для привязки вложенных ViewModels к сообщению. Есть ли ссылки на существующие примеры кода или строгие примеры точных имен, необходимых для выполнения вложенного связывания с ILists?
У Стива Сандерсона есть код, который делает подобные вещи здесь , но мы не можем заставить это привязаться к вложенным объектам.Все, что не имеет [0] .. [n] И не имеет последовательной нумерации, просто выпадает из возвращаемого объекта.
Есть идеи?