c#mvc5编辑嵌套集合

c#mvc5编辑嵌套集合,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试编辑嵌套集合并将值发回服务器。 我不知道这是否可能 Class1拥有Class2的集合 类2有类3 Class3有一个Class4的集合 Class4有一个Class5的集合 我从Nuget安装了包BeginCollectionItem 我为它们中的每一个创建了编辑器模板。 但编辑器仍然没有显示出来 @using (Html.BeginForm("SaveModification","Client", FormMethod.Post, new { @class = "form-

我正在尝试编辑嵌套集合并将值发回服务器。 我不知道这是否可能

Class1拥有Class2的集合

类2有类3

Class3有一个Class4的集合

Class4有一个Class5的集合

我从Nuget安装了包BeginCollectionItem

我为它们中的每一个创建了编辑器模板。 但编辑器仍然没有显示出来

@using (Html.BeginForm("SaveModification","Client", FormMethod.Post, new { @class =     "form-horizontal", role = "form" }))
{    
    @Html.AntiForgeryToken()
    @Html.HiddenFor(o => o.Id)
    <div class="row">
        <div class="col-md-12">
              @using (Html.BeginCollectionItem("Classes2"))
              {
                @Html.EditorFor(x => x.Classes2)
              }                
        </div>
    </div>
    <div class="row">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>    
}

Class2.cshtml
<div class="row">
    @Html.HiddenFor(o => o.Id)
    @Html.EditorFor(model => model.Class3)
</div>

Class3.cshtml
<div class="row">             
   @Html.HiddenFor(o=>o.Id)
    <div class="row">   
        <div class="col-md-10" >@Html.DisplayFor(model => model.Name)</div>
        <div class="col-md-2">@Html.EditorFor(model => model.Quantity)</div>
    </div>
    <div class="row">
    @using (Html.BeginCollectionItem("Classes4"))
    {              
        @Html.EditorFor(x => x.Classes4)
    }
    </div>
</div>

Class4.cshtml
<div class="row">                   
     <div class="col-md-10" style="padding-left:30px;">@Html.DisplayFor(model => model.Name)</div>
    <div class="col-md-2">@Html.EditorFor(model => model.Quantity)</div>
</div>
<div class="row">                                    
@using (Html.BeginCollectionItem("Classes5"))
{          
    @Html.EditorFor(x => x.Classes5)
}          
</div>

Class5.cshtml
 @Html.HiddenFor(model => model.Id)
<div class="row">
    <div class="col-md-10" style="padding-left:50px;">@Html.DisplayFor(model => model.Name)</div>
    <div class="col-md-2">@Html.EditorFor(model => model.Quantity)</div>
</div>

但是在我的控制器中,viewmodel没有相同的值,一些集合是空的。我只得到class2和class3值。

BeginCollectionItem应在单个集合项上使用,而不是在集合级别上使用。此外,如果希望只显示集合而不动态添加和删除,则不需要它

在主视图中,您可以简单地执行以下操作:

<div class="col-md-12">
    @Html.EditorFor(x => x.Classes2)
</div>

稍后我将添加其他功能(添加/删除)。目前,我只是想看看它将如何运作。显示层次结构,但我的更改不会发送到我的控制器。知道为什么吗?检查生成的HTML中的输入名称。
名称
应映射到模型属性名称,例如,Class3.Quantity的输入字段应命名为
Class2[0]。Class3.Quantity
,其中索引(0)将为集合中的下一项递增。请参阅我的更新。。使用fiddler,我看到响应包含编辑的值,但在我的控制器中,viewmodel仅包含部分编辑的值。我有2班和3班。其他集合为空。有什么提示吗?我唯一能看到的是
Classes2.index
有两次,但只有一个元素。而且
Class3.index
不应该在那里。。。无论如何,考虑到您模型的复杂性,我会尝试在ViewModel中展平您的集合,这样您只有一个嵌套级别,然后在控制器中您可以在model和ViewModel之间来回映射。
<div class="col-md-12">
    @Html.EditorFor(x => x.Classes2)
</div>
@using (Html.BeginCollectionItem("Classes2"))
{
    // Your Template code here... 
}