2

我有一个类型为 icollection 的模型。

public class myClass{
   public string param1{get; set;}
   public string param2{get; set;}
   public virtual ICollection<myClass2> param3{get; set;}

   public myClass()
   {
       param3 = new hashSet<myClass2>();
   }

}

public class myClass2{
   public string param4{get; set;}
   public string param5{get; set;}
   public virtual myClass param6{get; set;}
}

我将包含这两个类的模型传递给我的视图,并且能够通过使用查看我的收藏中的项目foreach(var item in Model.myClass.param3)

我将这些项目存储在一个隐藏字段中以在我的控制器中检索它

foreach(var item in Model.myClass.param3){
      @Html.HiddenFor(model => item.parm4);
      @Html.HiddenFor(model => item.parm5);
 }

但是当我提交表单并将模型传递给控制器​​时,我在调用 model.myClass.param3 时得到一个 count = 0。

如何将 ICollection 传递给我的视图?我试过这个链接,但不知道为什么它不起作用。

编辑

该链接使用类 Book 作为列表以进行索引(建议我应该将 ICollection 转换为列表)。我怎么做?另外,如果我将它转换为列表,我如何将它传递给控制器​​,因为控制器期望接收 IColletiion?

4

1 回答 1

2

您不能为此使用 foreach 循环,而必须使用 for 循环。

for (int i=0; i<Model.MyClass.param3.Count; i++)
    {
        @Html.HiddenFor( model => model.MyClass.param3[i])
    }

这样做的原因是HiddenFor帮助程序需要某种方式为每个字段分配唯一名称,以便模型绑定工作。i变量实现了这一点。

在您的情况下,您需要进行一些重构来实现这一点。我不认为ICollection或不HashSet支持索引,因此您需要将其转换为支持索引的List集合。

请参阅有关该主题的出色博客文章

于 2013-01-03T16:46:05.090 回答