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)