-1

我的班级是

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>

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

4

1 回答 1

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元素中显示名称和复选框?trf 这样您就可以tdEditorTemplate

于 2014-10-08T08:34:54.313 回答