ASP.NET MVC UpdateModel привязка с иерархией коллекций - PullRequest
0 голосов
/ 05 июня 2011

У меня следующий дизайн модели.

Шаблон содержит список категорий. Категория содержит список элементов.

Таким образом, существует 3 уровня иерархии. Поскольку дизайн пользовательского интерфейса требует, чтобы все 3 уровня были созданы на 1 странице, мне пришлось написать часть своего собственного кода, чтобы это работало. Это выглядит следующим образом:

Page Design

Я могу получить его для отправки обратно в метод создания действия, и FormCollection выглядит следующим образом.

FormValues for Create

Проблема, с которой я столкнулся, заключается в том, что UpdateModel работает на уровне шаблонов и категорий, но элементы не заполняются для категорий. HTML выглядит следующим образом. Как видите, я использовал синтаксис Category [guid_value] .Items [guid_value] для id. Разве это не должно выяснить привязку, автоматически основанную на этом?

enter image description here

Есть ли что-то, чего мне не хватает или что мне нужно сделать, чтобы привязка заработала?

Ответы [ 2 ]

2 голосов
/ 05 июня 2011

Если вы хотите, чтобы ваш html корректно связывался с вашей моделью, вы должны обратить внимание на html, который вы отображаете.Проблема, которую я вижу с вашим html,

<input type='hidden' value = 'Items.Index' value= 'some_guid' autocomplete = 'off'/>

, с этим механизмом связывания html-модели будет пытаться связать Items как дочерние объекты объекта Template, где он не найдет ни одного свойства с именем Items, и эти значения не будут связанык модели.вам нужно изменить скрытое поле на

<input type='hidden' name = 'Categories[category's guid].Items.Index' value = 'some guid' autocomplete = 'off'/>

, и вам нужно просто вызвать updatemodel в вашем методе действия, например

UpdateModel(yourobject);

Я не тестировал этот код, но я более чем уверенчто изменение вашего HTML таким образом поможет вам разобраться.@Mlchael Grassman вам больше не нужно использовать целочисленные идентификаторы для привязки коллекции.Пожалуйста, прочитайте сообщение Стива для получения дополнительной информации.На самом деле вам также не нужен GUID, кроме случайного числа, уникального для контекста страницы, при условии, что вы добавили дополнительное скрытое поле с индексом имени и значением, указанным в указанном выше случайном числе.Я написал в блоге о деталях формы Master в asp.net mvc, используя (и модифицируя) метод BeginCollectionItem, написанный Стивом.в части одной из этой серии блогов я просто показал, как можно динамически добавлять поля своей подробной записи на стороне клиента без вызова ajax.Во второй части я перенес шаблон редактора подробных записей в движок шаблонов jquery и отрисовал его на стороне клиента так, как он бы выглядел, если бы отображался через вызов ajax.

1 голос
/ 05 июня 2011

По умолчанию MVC использует следующие соглашения для именования.

Category[0].Items[0]
Category[0].Items[1]
Category[1].Items[0]
Category[1].Items[1]

Вы можете включить свое собственное обновление, используя следующую TryUpdateModel. Это слово, вероятно, нуждается в какой-то петле, но должно помочь вам начать.

TryUpdateModel(Category[Guid].Items[Guid], "Category[Guid].Items[Guid]", null, new string[] { "ExcludedPropery1", "ExcludedPropery2", "ExcludedProperyN", });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...