无法从视图向控制器提交二维“List”

时间:2017-02-15 07:27:08

标签: c# asp.net asp.net-mvc data-binding asp.net-mvc-5

CreateActivityViewModel将传递给View。

 public class CreateActivityViewModel
{
 public List<List<int>> SelectedDepartmentIds { get; set; }
 ...
}

在View中,使用这些代码生成html代码:

<div class="form-group">

    @Html.Label("报名范围", htmlAttributes: new {@class = "col-xs-12"})
    <div>
        <button id="repeat" type="button">增加单位范围</button>
    </div>
    @for (var i = 0; i < Model.MaxDepartmentLevel; i++)
    {
        <div class="col-xs-6">
            @if (i == 0)
            {
                @Html.Label((i + 1) + "级单位", htmlAttributes: new {@class = "control-label col-md-2"})
                @Html.DropDownListFor(x => x.SelectedDepartmentIds[0][i], Model.Departments,
                    "请选择单位", new {@class = "form-control department"})
            }
            else
            {
                @Html.Label((1 + i) + "级单位", htmlAttributes: new {@class = "control-label col-md-2"})
                @Html.DropDownListFor(x => x.SelectedDepartmentIds[0][i], Enumerable.Empty<SelectListItem>(),
                    "所有单位", new {@class = "form-control department"})
            }
        </div>
    }


</div>

此处x => x.SelectedDepartmentIds[0][i]是无法传递回服务器的二维List。在调试时,createActivityViewModel.SelectedDepartmentIds=null。但是,使用Chrome开发工具查看传递给服务器的内容,我看到SelectedDepartmentIds确实提交了:

enter image description here

事实上,我在其他地方尝试过几乎相同的工作,唯一的区别是我认为成功的工作是传递一个维度List,现在是两个维度。 ASP.NET不支持绑定二维List或什么?

1 个答案:

答案 0 :(得分:1)

这应该按预期工作。从评论中,您似乎忘记将属性包含在您的Create操作正在使用的[Bind(Include=...)]属性中。这就是说,因为您使用的是视图模型,所以不需要任何Bind属性。作为视图模型一部分的属性将被绑定。它更不容易出错和明确。