发布具有相同名称的模型BeginCollection

时间:2017-06-28 13:35:19

标签: asp.net-mvc collections

我的模特是一个人包含另一个人(父母)的集合。 每个人都有一系列联系人。

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”))有关,但是如何解决呢?

1 个答案:

答案 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功能将为您完成此任务。