使用MVC 3编辑集合中的集合

时间:2011-11-18 08:45:01

标签: c# asp.net-mvc-3

我正在尝试为以下场景创建编辑视图:

Profile class { String profileName, IList<Phase> phases; //plus there getter setter}

Phase class { String phaseName, IList<SubPhase> subPhases; //plus there getter setter}

SubPhase class { String subPhaseName // plus there getter setter}

我创建了包含@model CollectionEditing.Models.Profile的个人资料视图和两个部分视图作为PhaseEditor和SubPhaseEditor

我的个人资料视图我使用的是局部视图:

//iteration the phases
for (int i = 0; i < Model.Phases.Count; i++)
{ 
    //rendering the partial view for Phases
    Html.RenderPartial("PhaseEditor", Model.Phases[i]);   
    //iteration the SubPhases 
    for (int j = 0; j < Model.Phases[i].SubPhases.Count; j++)
    {
        //rendering the partial view for SubPhases
        Html.RenderPartial("SubPhaseEditor", Model.Phases[i].SubPhases[j]);
    }
}

可编辑视图已成功创建。

当我单击“提交”按钮时,在我的操作中,我获取了“个人档案”及其“阶段”列表的值,而我没有在“阶段”类中获得“子阶段”列表。子阶段列表设置为null。

我也尝试将Html.RenderPartial("SubPhaseEditor", Model.Phases[i].SubPhases[j]);放在部分视图PhaseEditor中,但它仍然不起作用。

请帮助......我如何获得子过程列表。

非常感谢你的帮助。

苏希尔

1 个答案:

答案 0 :(得分:0)

你的意思是ModelBinder没有将“完整”对象传递给你的控制器?

这不会自动为您完成。 ModelBinder不使用底层集合。您必须自己创建此集合。在控制器中使用FormCollection作为参数,并遍历它以创建集合。

这篇文章展示了如何通过FormCollection进行枚举: How can a formcollection be enumerated in ASP.NET MVC?