我的模特是一个人包含另一个人(父母)的集合。 每个人都有一系列联系人。
Edit.cshtml
@model Person
@using (Html.BeginForm("Save", "", FormMethod.Post, ...))
{
@foreach (var parent in Model.Parents)
{
Html.RenderPartial("ParentItem", parent);
}
@foreach (var contact in Model.Contacts)
{
Html.RenderPartial("ContactItem", contact);
}
\\other
}
ContactItem.cshtml
@model Contact
@using (Html.BeginCollectionItem("Contacts"))
{
@Html.HiddenFor(model => model.Id)
\\other
}
ParentItem.cshtml
@model Person
@using (Html.BeginCollectionItem("Parents"))
{
@Html.HiddenFor(model => model.Id)
@foreach (var contact in Model.Contacts)
{
Html.RenderPartial("ContactItem", contact);
}
\\other
}
当我向一个人添加一个新的父亲(Person.Parents.first现在存在),然后将一个联系人添加到一个父亲(Person.Parents.first.Contacts.first expect)时出现问题,模型来到“保存” “在一个外部集合内(Person.Contacts.last我的新联系人在这里) 我认为它与表单上的集合命名(BeginCollectionItem(“Contacts”))有关,但是如何解决呢?
答案 0 :(得分:0)
您应该使用EditorTemplates,而不是 PartialViews :
<强> Edit.cshtml 强>
@model Person
@using (Html.BeginForm("Save", "", FormMethod.Post, ...))
{
@Html.EditorFor(x => x.Parents)
@Html.EditorFor(x => x.Contacts)
\\other
}
在Views/Shared/EditorTemplates
文件夹中创建2个视图:
<强> Contact.cshtml 强>
@model Contact
@Html.HiddenFor(model => model.Id)
\\other
<强> Person.cshtml 强>
@model Person
@Html.HiddenFor(model => model.Id)
@Html.EditorFor(x => x.Contacts)
\\other
然后您在命名时遇到任何问题,因为EditorTemplates功能将为您完成此任务。