【发布时间】:2016-04-04 16:08:30
【问题描述】:
我有一个父视图模型(我们称之为 ParentViewModel),它有一个子视图模型列表(我们称之为 ChildViewModel)。每个子视图模型都可以独立编辑,并且我有一个单独的表单,可以循环显示。这非常有效,但我无法弄清楚如何只发布子模型而忽略父模型。
这是我的表格:
@model ParentViewModel
...
@foreach (var child in Model.Children)
{
@using (Html.BeginForm("_EditChild", "Admin", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-group">
@Html.EditorFor(model => child.Content, new {htmlAttributes = new {@class = "form-control"}})
@Html.ValidationMessageFor(model => child.Content, "", new {@class = "text-danger"})
</div>
<div class="form-group">
<div class="col-md-12">
<input type="submit" value="Create" class="btn btn-default new-post" />
</div>
</div>
}
}
这是我的控制器的签名。它期望作为列表存在于 ParentViewModel 中的类型 ChildViewModel。
[Authorize]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult _EditPost([Bind(Include = "")] ChildViewModel childViewModel)
{
}
表单工作并提交,但 ChildViewModel 在到达提交控制器时为空。这肯定是因为 Form Post 和 Action 之间没有绑定。
【问题讨论】:
-
BeginForm 调用中的 _EditChild 是什么?
-
可能会移动@使用更高? @using...@foreach...*
-
首先,您不能在
foreach循环内生成表单控件(请参阅this answer 以获得解释)。但是您一次只能发回一个表单,因此为每个项目创建一个表单是没有意义的。在一个表单中生成所有控件,以便您可以一次编辑和回发所有更改,或者提供指向另一个页面的链接来编辑您的子项目。
标签: c# asp.net-mvc