Проблема с частями заключается в том, что они не сохраняют навигационный контекст.Это означает, что любые поля ввода, которые вы могли бы поместить в этот фрагмент, будут иметь неправильные имена, и механизм связывания модели по умолчанию не сможет получить значения обратно при выполнении POST.Ваш HTML будет выглядеть следующим образом:
<input type="text" name="Prop1" value="property 1 value" />
<input type="text" name="Prop2" value="property 2 value" />
, тогда как правильный:
<input type="text" name="subModel.Prop1" value="property 1 value" />
<input type="text" name="subModel.Prop2" value="property 2 value" />
Чтобы добиться правильной разметки, я бы рекомендовал вам использовать шаблоны редактора.
Таким образом, вы заменяете:
@{ Html.RenderPartial("_subPage", Model.subModel); }
на:
@Html.EditorFor(x => x.subModel)
, а затем вы перемещаете ваш _subPage.cshtml
частичный в ~/Views/Shared/EditorTemplates/SubModelType.cshtml
, где SubModelType
является типом subModel
свойство:
@model SubModelType
@Html.EditorFor(x => x.Prop1)
@Html.EditorFor(x => x.Prop2)
Теперь, когда вы посмотрите на сгенерированный HTML, соответствующие имена полей ввода должны начинаться с префикса subModel
, а внутри действия контроллера POST свойство model.subModel
на этот раз будет правильно инициализировано и заполнено.из значений, введенных пользователем в поля ввода.