2017-02-15 24 views
0

CreateActivityViewModel将被传递到视图。不能提交二维`列表`从视图到控制器

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

在视图中,使用这些代码来生成的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或什么?

+2

你可以显示你的'创建'行动方法签名?你也可以向我们展示'Content-Type'请求标题? –

+0

@DarinDimitrov谢谢!启发,我检查了'Create'action签名,发现我忘了在'[Bind(Include = ...)]'中添加该属性。 – guo

+1

您使用视图模型,因此您绝对不应该有'[Bind]'属性 –

回答

1

这应该按预期工作。从注释看来,您似乎已经忘记将该属性包含到您的创建操作正在使用的[Bind(Include=...)]属性中。这就是说,由于您使用的是视图模型,因此您不需要任何绑定属性。作为视图模型一部分的属性将被简单地绑定。它更不容易出错和明确。

相关问题