2014-10-08 65 views
1

首先,我想说我做了很多研究,尝试了很多方法,但都没有成功。我想避免:如何将对象集合渲染为可编辑(复选框)列表视图

  • 写我自己的模型绑定
  • 包装形式为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) 
    {    
     //... 
    } 

不幸的是,我的每一个学尝试失败,我收到了一个空模型(大概模型绑定不承认形式这样,我想它)

这是我最新的学尝试:

@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

只需使用而不是foreach一个for循环得到正确结合

@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属性,它应该很好地绑定。