MVC表单:发布属性列表

本文关键字:属性 列表 布属性 表单 MVC | 更新日期: 2023-09-27 18:30:00

我有一个视图模型,它的List属性类型为X。当我试图将此属性发布到服务器时,收到的列表总是为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; }
}

使用编辑模板生成视图

形式:

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

编辑器模板:

@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])感谢

MVC表单:发布属性列表

更改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" .../>