1

我正在尝试更新一个复合页面模型,该模型作为其属性之一具有对象列表。

我的模型如下所示:

public class PageViewModel 
{
    public ProgramListVM ProgramsDDL { get; set; }

    public PageViewModel()
    {
        this.ProgramsDDL = new ProgramListVM();
    }
}

ProgramListVM课程是:

public class ProgramListVM
{
    public List<ProgramVM> Program_List { get; set; }
    public int SelectedValue { get; set; }

    public ProgramListVM()
    {
        this.Program_List = new List<ProgramVM>();
        this.SelectedValue = 0;
    }
}

并且ProgramVM是:

public class ProgramVM
{
    public int ProgramID { get; set; }
    public string ProgramDesc { get; set; }

    public ProgramVM(int id, string code)
    {
        this.ProgramID = id;
        this.ProgramDesc = code;
    }
}

我尝试通过以下两个来呈现这个下拉列表:

1-

  <%: Html.DropDownList("ProgramsDDL", new SelectList(Model.Page6VM.ProgramsDDL.Program_List, "ProgramID", "ProgramDesc", Model.Page6VM.ProgramsDDL.SelectedValue))%>

2-

 <%: Html.DropDownListFor(m => m.Page6VM.ProgramsDDL.Program_List, new SelectList(Model.Page6VM.ProgramsDDL.Program_List, "ProgramID", "ProgramDesc"), Model.Page6VM.ProgramsDDL.SelectedValue)%>

但是当我尝试通过控制器操作更新我的模型时

[HttpPost]
    public ActionResult UpdateUser(PageViewModel model)  
    {
    }

model.ProgramsDDL.count为零。

呈现此下拉列表并能够设置所选索引并且还能够将所选索引发送回控制器的最佳方法是什么?

4

1 回答 1

1

您混淆了Html.DropDownListFor()的参数。下面的代码示例应该可以工作。

<%: Html.DropDownListFor(m => m.SelectedValue, 
                              new SelectList(Model.Page6VM.ProgramsDDL.Program_List, "ProgramID", "ProgramDesc"), 
                              null) %>

您的模型中还应该有一个回发的 SelectedValue。

public class PageViewModel 
{
    public ProgramListVM ProgramsDDL { get; set; }
    public int SelectedValue { get; set; }

    public PageViewModel()
    {
        this.ProgramsDDL = new ProgramListVM();
    }
}

此外,默认模型绑定器无法将复杂集合映射到您的模型。无论如何,您可能在发布操作中不需要它们。

于 2012-10-16T19:11:18.403 回答