类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
确实提交了:
事实上,我在其他地方尝试过几乎相同的工作,唯一的区别是我认为成功的工作是传递一个维度List
,现在是两个维度。 ASP.NET不支持绑定二维List或什么?
答案 0 :(得分:1)
这应该按预期工作。从评论中,您似乎忘记将属性包含在您的Create操作正在使用的[Bind(Include=...)]
属性中。这就是说,因为您使用的是视图模型,所以不需要任何Bind属性。作为视图模型一部分的属性将被绑定。它更不容易出错和明确。