Asp.Net MVC 2: Как именно модель представления связывается с моделью после отправки обратно? - PullRequest
0 голосов
/ 09 июня 2010

Извините за длину, но картинка стоит 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] И не имеет последовательной нумерации, просто выпадает из возвращаемого объекта.

Есть идеи?

1 Ответ

0 голосов
/ 15 июня 2010

Мы нашли обходной путь, используя следующее:

 Html.EditorFor(m => m, "ViewNameToUse", "FieldPrefix")

Где FieldPrefix - это «объект [0]».Это вряд ли идеально, но, безусловно, работает довольно хорошо.Это просто и элегантно.

...