1

プロパティの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;
    }
}

このドロップダウンリストを次の2つでレンダリングしようとしています。

1-

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

2-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 に答える