我有一个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]) 感谢
答案 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" .../>