这一直在我身边刺了一阵子。如果我在对象数组上使用EditorFor,并且编辑器模板中有一个表单。使用EditorFor(模型[])传回单个对象
public class FooController:Controller{
pubic ActionResult Action(Foo foo){
blah...
}
}
Index.cshtml
@model IEnumerable<Foo>
@Html.EditorFor(m=> m)
EditorTemplate
@model Foo
@using (Html.BeginForm("action", "controller"))
{
@Html.TextBoxFor(f=> f.A)
@Html.CheckBoxFor(f=> f.B)
@Html.LabelFor(f=> f.B)
}
所以我打了几个问题。
复选框标签对不正确地绑定到该复选框(这与标签不接受财产)的专有名称([0].A
而不是A
做。
我知道我可以通过对索引中的模型进行foreach来删除前期文本,但是由于框架没有意识到同一个项目有多个并且给它们起了相同的名称,所以将id和screw命名为空白。我刚才一直在这样做。
@Html.CheckBoxFor(m => m.A, new {id= Html.NameFor(m => m.A)})
<label for="@Html.NameFor(m => m.A)">A</label>
但是我不能解决控制器无法接受作为单一模型的物品。我甚至尝试在Action
参数中允许一个Foo的数组,但是只有当它的第一个项目被编辑时([0]...
),如果它的数组中的任何其他项目(例如[1].A
)控制器不知道如何解析它。任何帮助,将不胜感激。
如何使一个复杂的模型? –
@MarcLyon你的意思是将IEnumerable包装在父类中吗?因为这打破了每个单独项目包装的整体目的 –
我不完全确定你的描述,但它可能是http://stackoverflow.com/q/25333332/11683 – GSerg