UpdateModel не обновляет свойство "deep" - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть приложение ASP.NET MVC.В определенный момент я получаю FormCollection в методе Controller, который я хочу использовать для обновления модели.В коллекции не все значения являются свойствами этой модели, а обновляемое свойство является элементом из списка, и этот список также является элементом из другого списка.Примерно так (надеюсь, это понятно):

propertyToUpdate --> model.Items[0].Subitems[0].SomePropertyClass.Value;

Я пробовал это в моем контроллере:

UpdateModel(model);

Проблема в том, что это не работает, и я предполагаю, что у него что-то естьделать с тем, что отражение не работает.Я отправился на поиски и наткнулся на эту статью .Поэтому я понимаю, что использование префикс-параметра решает проблему.Но не в моем случае, поскольку свойства лежат "глубже" в модели как элементы из списка.

Кто-нибудь знает, как я могу решить эту проблему?

Обновление:

Вот пример EditorTemplate для свойства:

@model Q95.Domain.Property

<li>
    @Html.DisplayFor(p => p.Description) : 
    @Html.DisplayFor(p => p.Quantity.Value)
    @Html.DisplayFor(p => p.Quantity.Unit.Description)
    <br />
    @Html.TextBoxFor(p => p.Quantity.Value)
</li>

Этот шаблон называется так:

<ul>
    @Html.EditorFor(model => model.SegmentRequirement.MaterialRequirements[j].Properties)
</ul>

Достаточно ли этого кода или что-то по-прежнему отсутствует?

Update2:

Хорошо, во всех под-свойствах я определил конструкторы без параметров и теперь я вызываю:

UpdateModel(segmentRequirement, "SegmentRequirement", form.ToValueProvider());

Это обновляет модель, но все из MaterialRequirements восстанавливаются ...: S

Ответы [ 3 ]

1 голос
/ 06 декабря 2011

UpdateModel отлично работает с «Глубокими свойствами».
Возможно, проблема в том, что данные в коллекции, которую вы получаете, не совпадают с именами свойств.
Проверьте 3 места, чтобы увидеть значения, которые вы получаете со страницы

  1. Значения формы.

  2. Данные маршрута

  3. Строка запроса

В точном порядке.

ключи должны соответствовать модели имен свойств .


Обновление:
Как сопоставить ключи с именами свойств?
Входной идентификатор будет ключом, который вы получите, измените идентификаторы в соответствии с именами ваших свойств, илиеще лучше использовать помощник HtmlTextBoxFor : см. эту статью:

1 голос
/ 06 декабря 2011

Возможно, вам следует создать сплющенную ViewModel, а затем использовать ее для заполнения представления, а затем синхронизировать его с реальной моделью.

0 голосов
/ 06 декабря 2011

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

...