我有一个具有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传递给我的视图? 我试过this link,但不知道它为什么不起作用。
修改
该链接使用Book类作为列表进行索引(建议我将ICollection转换为列表)。我怎么做?此外,如果我将其转换为列表,我如何将其传递给控制器,因为控制器期望接收ICollectiion?
答案 0 :(得分:1)
你不能使用foreach循环,你必须使用for循环。
for (int i=0; i<Model.MyClass.param3.Count; i++)
{
@Html.HiddenFor( model => model.MyClass.param3[i])
}
原因是HiddenFor
帮助器需要某种方式为每个字段分配唯一的名称,以使模型绑定起作用。 i
变量可以实现此目的。
在你的情况下,你需要做一些重构来实现这个。我认为ICollection
或HashSet
不支持编制索引,因此您需要将其强制转换为List
或某些支持索引的集合。
请参阅this excellent blog post主题。