MVC表格:Post Propertylist

时间:2014-11-11 00:31:35

标签: c# asp.net-mvc subclass form-submit

我有一个viewmodel,它有一个类型为X的List属性。当我尝试将此属性发布到服务器时,recived列表始终为null。

从客户端传输的数据如下所示:

...
XXX.[0].Test:false
XXX.[0].Test1:true
XXX.[1].Test:false
XXX.[1].Test1:false
...

ViewModels看起来像这样:

    class ViewModel
    {
       public ViewModel()
       {
          this.XXX = new List<TestViewModel>()
       }
       public List<TestViewModel> XXX { get; set; }
    }

public TestViewModel {
  public bool Test{ get; set; }
  public bool Test1 { get; set; }
}

使用Edittemplate生成视图

形式:

using (Html.BeginForm(null, null, FormMethod.Post))
{
    @Html.EditorFor(m => m.ViewModel)
}

EditorTemplates:

@model List<TestViewModel>
@for (int i = 0; i < Model.Count; i++)
{
   @Html.CheckBoxFor(p => Model[i].Test)
   @Html.CheckBoxFor(p => Model[i].Test1)
}

问题似乎是附加点...(XXX **。** [0]) 感谢

1 个答案:

答案 0 :(得分:1)

更改EditorTemplate,以便模型是对象(不是集合)

TestViewModel.cshtml

@model TestViewModel
@Html.CheckBoxFor(m => m.Test)
@Html.CheckBoxFor(m => m.Test1)

的主要观点
@model ViewModel
using (Html.BeginForm(null, null, FormMethod.Post))
{
  @Html.EditorFor(m => m.XXX)
  ....
}

EditorFor()方法将使用索引器正确命名控件,这看起来像

<input type="checkbox" name="XXX[0].Test" .../>
<input type="hidden" name="XXX[0].Test" .../>
....
<input type="checkbox" name="XXX[1].Test" .../>
<input type="hidden" name="XXX[1].Test" .../>