2012-04-26 1 views
1

ViewBagの項目を含むドロップダウンリストを作成できますが、現在の項目を選択する方法はないようです。私はこれを達成するためにモデルを使用していない、ただViewBagを使用したい、そうでなければ、表示するために選択項目と実際のデータをラップするために別のモデルクラスを作成しなければならないだろう。選択した値に対してViewBagのみを使用するHmtl.DropDownList

私のコードは:

@Html.DropDownList("MyFilter", (IEnumerable<SelectListItem>)ViewBag.SelectItems, "Show All") 

選択リストの値を設定するためのパラメータはありません。私は何か見落としていますか? DropDownListFor <を使用する場合、これはモデルに対してのみ有効ですか?

答えて

2

あなたのViewBag/ViewDataMyFilterプロパティを設定してみてください:

public ActionResult Index() 
{ 
    ViewBag.SelectItems = new[] 
    { 
     new SelectListItem { Value = "1", Text = "item 1" }, 
     new SelectListItem { Value = "2", Text = "item 2" }, 
     new SelectListItem { Value = "3", Text = "item 3" }, 
    }; 

    // preselect the second item 
    ViewBag.MyFilter = "2"; 

    return View(); 
} 

をしかし、私の推薦は、ビューモデルを使用することで、ヘルパーの強く型付けされたバージョン:

public ActionResult Index() 
{ 
    var model = new MyViewModel 
    { 
     SelectItems = new[] 
     { 
      new SelectListItem { Value = "1", Text = "item 1" }, 
      new SelectListItem { Value = "2", Text = "item 2" }, 
      new SelectListItem { Value = "3", Text = "item 3" }, 
     }, 
     // preselect the second item 
     MyFilter = "2" 
    }; 
    return View(model); 
} 

とあなたの強力でタイプビュー:

@model MyViewModel 
... 
@Html.DropDownListFor(x => x.MyFilter, Model.SelectItems, "Show all") 
+0

Doh!もちろん、選択リストのIDはViewBagプロパティと一致します。ありがとう;) – jaffa

関連する問題