2010-06-09 4 views
0

Извините за длину, но картинка стоит 1000 слов:Asp.Net MVC 2: Как точно модель представления привязывается к модели после публикации?

В ASP.NET MVC 2, поле формы ввода «имя» атрибут должен содержать именно синтаксис ниже, вы бы использовать для ссылки на объект в C# чтобы связать его с объектом после отправки. Тем не менее, если у вас есть объект, подобный следующему, где он содержит множество заказов, имеющих несколько OrderLines, имена будут выглядеть и работать так, как это (чувствительно к регистру):

Это работает:

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 Хаек в here объясняет, как удалить [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?

У Стива Сандерсона есть код, который делает такую ​​вещь here, но мы не можем заставить это привязать обратно к вложенным объектам. Все, что не имеет [0] .. [n] И, будучи последовательным в нумерации, просто падает с возвращаемого объекта.

Любые идеи?

+0

Просто комментарий, в нашем тестовом коде, заказ имеет несколько заказов (заказ [0], заказ [1]). Я сократил список, чтобы служить примером. –

ответ

0

Мы нашли работу вокруг, используя следующее:

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

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