C# 编辑器模板集合未绑定到post

C# 编辑器模板集合未绑定到post,c#,model-view-controller,asp.net-mvc-5,model-binding,mvc-editor-templates,C#,Model View Controller,Asp.net Mvc 5,Model Binding,Mvc Editor Templates,我有一个主视图模型,其中包含要编辑的子视图模型列表: public class MyObjectGridViewModel { public string Comment { get; set; } public List<MyObject> Objects { get; set; } = new List<MyObject>(); } 然后是一个表单视图,用于内联编辑单个MyObject模型,即没有单独的edit视图: @model MyObjectG

我有一个主视图模型,其中包含要编辑的子视图模型列表:

public class MyObjectGridViewModel
{
    public string Comment { get; set; }
    public List<MyObject> Objects { get; set; } = new List<MyObject>();
}
然后是一个表单视图,用于内联编辑单个
MyObject
模型,即没有单独的
edit
视图:

@model MyObjectGridViewModel
@using (Html.BeginForm("Ban", "Access", FormMethod.Post, new { role = "form" }))
{
    @Html.TextBoxFor(m => m.Comment)
    <table class="table bans">
        @Html.EditorFor(m => m.Objects)
    </table>
    <input type="submit" value="Save" />
}
但是,当我单击submit按钮并调用此操作时,
model.Objects
列表中没有项目。编辑器模板显示预期的5个项目,我选中1或2个复选框,提交并丢失
Objects
属性中的所有项目


这里出了什么问题?

我发现了一些旧代码,解决方案似乎是为主视图模型使用一个编辑器模板,并在其中为集合项使用另一个模板。我现在有:

MyObjectGridViewModel.cshtml:

@model MyObjectGridViewModel
@Html.EditorFor(model => Model.Objects)
MyObject.cshtml:

@model MyObject
<tr>
    <td class="hidden">
        @Html.HiddenFor(m => m.Id)
    </td>
    <td>
        @Html.DisplayFor(m => m.Name)
    </td>
    <td>
        @Html.CheckBoxFor(m => m.IsBanned, new { @class = "checkbox" })
    </td>
</tr>
我现在有

@Html.EditorFor(m => Model)

一切似乎都很好。

您的操作方法名为
确认
,但在
Html中。BeginForm
您似乎在
访问
控制器上使用了一些
禁止
操作。您是否介意编辑您的问题以匹配您的真实代码?另外,您似乎在
MyObject
模型上没有相应的
Name
属性输入字段,只有
DisplayFor
助手。在这种情况下,提交时不会向服务器发送任何值。此外,当我尝试您的代码时,它对我来说运行得非常好,所以我想问题在于代码的其他部分,不幸的是,这里没有显示。@DarinDimitrov我已经更正了操作方法名称,这是唯一的错误。只有为
名称
显示
才是完全有意的。我只想显示名称,并且只编辑
isbanked
属性。请尝试为名称添加一个隐藏的属性,该属性不可编辑。它不会提交值,因此模型绑定器可能不喜欢这样。猜猜看,你的代码看起来不错。是否生成正确的html(使用基于零的连续索引器)-例如
等?还可以尝试删除
=newlist()
@model MyObject
<tr>
    <td class="hidden">
        @Html.HiddenFor(m => m.Id)
    </td>
    <td>
        @Html.DisplayFor(m => m.Name)
    </td>
    <td>
        @Html.CheckBoxFor(m => m.IsBanned, new { @class = "checkbox" })
    </td>
</tr>
@Html.EditorFor(m => Model.Objects)
@Html.EditorFor(m => Model)