我的主视图模型有一个 ChildViewModel 的集合。在视图中,我遍历集合并调用 EditorFor(),如下所示:
@for (int i = 0; i < Model.Children.Count; i++)
{
@Html.EditorFor(m => m.Child[i]);
}
编辑器模板如下所示:
@model ChildModel
@using (Html.BeginForm("EditChild", "MyController"))
{
@Html.HiddenFor(m => m.ChildId)
@Html.TextBoxFor(m => m.ChildName)
}
这将生成标记,其中每个孩子都在一个单独的表单中,并且每个这样的表单都将有一个名称为 Child[0].ChildName 的输入控件。我为每个孩子使用单独的表单,因为孩子将在每一行显示一个,然后用户可以编辑和提交单行。
我的表单操作方法是:
[HttpPost]
public ActionResult EditChild(ChildViewModel form) { }
问题是,当调用 this 时,模型的所有属性都将为空,因为模型绑定器不知道前缀。在某些情况下,我们可以使用 BindAttribute 告诉模型绑定器前缀,但在这种情况下,前缀不是常量:它将是 Child[0]、Child[1] 等。
总之,我们希望为集合的每一行重复相同的表单,然后允许用户发布单个表单。在这种情况下,Web 如何处理 id、name、prefix 和 model 绑定?