我在视图中有以下代码:
@foreach (var parent in Model.Parents)
{
@foreach (var child in parent.Children)
{
@Html.TextAreaFor(c => child.name)
}
}
表单中的其他textareas保存正常,但在提交表单时,我的控制器中的POST方法获取一个带有null父字段的viewModel。知道为什么吗?
答案 0 :(得分:6)
如果您希望绑定集合,则无法使用foreach
循环。您必须使用for
循环:
@for (int i = 0; i < Model.Parents.Count; i++) {
@for (int j = 0; j < Model.Parents[i].Children.Count; j++) {
@Html.TextAreaFor(x => x.Parents[i].Children[j].name)
}
}
或者你可以使用父母的编辑模板(甚至是儿童的另一个)。这需要您为Parent模型设置模板并将其放在EditorTemplates文件夹中,然后调用它:
@Html.EditorFor(x => x.Parents)
MVC将负责枚举和绑定。然后可以为儿童名单做同样的事情。
这是关于使用它们的mvc教程(我无法找到mvc4版本):http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/