如何将对象集合呈现为可编辑(复选框)列表视图

时间:2014-10-08 16:43:20

标签: asp.net-mvc razor

首先,我想说我做了很多研究,尝试了很多方法,但没有一个有效。我想避免:

  • 编写我自己的模型装订器
  • 将表格打包成json
  • 直接从FormCollection对象中读取

我的模型类看起来像这样:

public class ListViewModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool IsChecked { get; set; }        
    }

我将它作为IEnumerable集合传递给视图。 我正在尝试将所有表单数据打包到IEnumerable中,比如这里

    [HttpPost]
    [Authorize(Roles = "User")]
    public ActionResult EditVisitLists(List<ListViewModel> model)
    {            
        //...
    }

不幸的是,我的每一次尝试都失败了,我收到null作为模型(可能是模型绑定器不能像我希望的那样识别表单)

这是我的最新尝试:

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(m => item.Name)
        </td>
        <td>                
            @Html.CheckBoxFor(m => item.IsChecked, new { id = "[" + item.Id + "].Name" })
            @Html.HiddenFor(m => item.Name)
        </td>
    </tr>
}  

1 个答案:

答案 0 :(得分:1)

只需使用for循环代替foreach即可获得正确的绑定

@for (var i = 0; i < Model.Count; i++) {
   @Html.Displayfor(m => Model[i].Name

   @Html.CheckBoxFor(m => Model[i].IsChecked)
   @Html.HiddenFor(m => Model[i].Name)
}

查看生成的html,您现在将拥有不同的nameid属性,这些属性应该可以正常绑定。