模型绑定CheckboxFor与ICollection

时间:2014-10-08 07:04:26

标签: asp.net-mvc-4 model-binding checkboxfor

我的班级

public partial class Team
    {
        public Team()
        {
            this.Trials = new HashSet<Trials>();               
        }

        public int TeamId { get; set; }
        public string TeamName { get; set; }
        public string TeamDescription { get; set; }
        public virtual ICollection<Trials> Trials { get; set; }
    }

并且查看

@model Project.Classes.Team

 <td>
         @for (int i = 0; i < Model.Trials.Count; i++ )
         {                
                @Html.DisplayFor(x => Model.Trials.ElementAt(i).Name)
                @Html.HiddenFor(x => Model.Trials.ElementAt(i).Name)
                @Html.HiddenFor(x => Model.Trials.ElementAt(i).TrialID)
                @Html.CheckBoxFor(x => Model.Trials.ElementAt(i).isChk)  
             <br />               
         } 
</td>

当显示视图时,它显示模型(团队)中的试验对象(3试验)并显示在表单上,​​但是当表单发布然后在控制器中我没有得到试验的任何值它显示0试验...我通过在类中将ICollection更改为IList来完成它但是......团队类是由EF自动生成的,当项目重新运行时它忘记了更改,所以我想用ICollection plz做这个......

1 个答案:

答案 0 :(得分:1)

在您View/Shared/EditorTemplates文件夹中,使用以下代码添加名为Trials.cshtml的新视图(创建为部分视图)

@model YourAssembly.Trial
@Html.HiddenFor(m => m.ID)
@Html.HiddenFor(m => m.Name)
@Html.DisplayFor(m => m.Name)
@Html.CheckBoxFor(m => m.isChk)

然后在您的视图中,使用@Html.EditorFor(m => m.Trials)

替换循环
@model Project.Classes.Team
....
@Html.EditorFor(m => m.Trials)

EditorFor将使用索引器正确命名集合项以进行回发,例如它将生成

<input type="hidden" name="Trials[0].ID" ...>
<input type="hidden" name="Trials[1].ID" ...>

注意:您是否真的想在一个表格单元格中显示整个集合,或者您的意思是每行Trial一个,并且显示名称和复选框位于不同的td元素中? f这样您就可以在tr

中添加tdEditorTemplate元素