2

在我看来,我有以下代码:

@foreach (var parent in Model.Parents)
        {      
            @foreach (var child in parent.Children)
                { 

                 @Html.TextAreaFor(c => child.name)

                }                   
        }

表单中的其他文本区域保存得很好,但是当提交表单时,我的控制器中的 POST 方法会获取一个带有 null 父字段的 viewModel。知道为什么吗?

4

1 回答 1

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/

于 2013-03-05T20:46:41.073 回答