0

さまざまなアーティファクトのコードを以下に示します。

実在物

public class ChooseFirst
{
    public int ChooseFirstId { get; set; }
    public string ChooseFirstName { get; set; }
}

モデルを見る

public class SelectViewModel
{
    public IEnumerable<SelectListItem> ListChooseFirst { get; set; }
}

コントローラ/取得アクション

//
    // GET: /MenuOne/

    public ActionResult MenuOne()
    {
        var selectViewModel = new SelectViewModel
                                  {
                                      ListChooseFirst = ChooseFirstList()
                                  };

        return View(selectViewModel);
    }
 private IEnumerable<SelectListItem> ChooseFirstList()
    {
        //here data comes from database
        List<ChooseFirst> list = _getFComboService.GetFComboList();

        List<SelectListItem> items = new List<SelectListItem>();
        foreach (ChooseFirst chooseFirst in list)
        {
            SelectListItem item = new SelectListItem();
            item.Text = chooseFirst.ChooseFirstName;
            item.Value = chooseFirst.ChooseFirstId.ToString();
            items.Add(item);
        }
        return items;
    }

HTML ビュー

@Html.DropDownList("FCombo", Model.ListChooseFirst, "--Select One--")

フォームを投稿すると、「selectViewModel」の値が NULL になるという問題が発生しました。バインダーをモデル化する必要はありますか。モデル バインダーを作成する方法を提案してください。

//
    // POST: /MenuOne/
    [HttpPost]
    public ActionResult MenuOne(SelectViewModel selectViewModel)
    {
        return View();
    }
4

2 に答える 2

0

それは正しいです。サーバーにポストされるのは、選択したオプションの値を持つ「FCombo」だけです。選択リスト項目の列挙はありません。代わりに、投稿されたデータのビュー モデルが必要です。

class SelectedOptionViewModel
{
    public int FCombo {get;set;}
}

または、パラメーターを引数として直接渡すことができます

public ActionResult MenuOne(int fcombo)
{
}
于 2012-06-29T19:24:00.623 に答える
0

ドロップダウンリストの選択した値をviewModelにバインドするプロパティがないようです。次のようなものが必要です:

 @Html.DropDownListFor(model => model.SelectedItem, Model.ListChooseFirst)

SelectedItem プロパティを追加するには、viewModel を更新する必要があります。

    class SelectedOptionViewModel
{
    public int SelectedItem {get;set;}
}
于 2012-06-29T19:24:17.563 に答える