ASP.NET MVC DropDownList
ドロップダウンリストを表示する時、Controller側で
SelectListとSelectListItemのどちらを使えばよいかわからなかった。
結論
どちらでもいい。
けど、IEnumerable
SelectList使う
Controller
[HttpGet] public ActionResult Index() { IEnumerable<FoodView> foods = GetFoods(); var view = new PersonDetailsView(); view.FoodSelectList = new SelectList(foods, "Id", "Name"); return View(view); } private IEnumerable<FoodView> GetFoods() { IList<FoodView> foods = new List<FoodView>() { new FoodView() { Id = 1, Name = "りんご" } , new FoodView() { Id = 2, Name = "じゃがいも" } }; return foods; }
IEnumerable使う
Controller
[HttpGet] public ActionResult Index() { IEnumerable<FoodView> foods = GetFoods(); var view = new PersonDetailsView(); view.FoodSelectList = foods.Select(f => new SelectListItem() { Value = f.Id.ToString(), Text = f.Name }); return View(view); }
Viewは2つともこれ
@Html.DropDownListFor(m => m.FavoriteFoodId, Model.FoodSelectList)
valueとtextの指定方法においては、IEnumerable
あと拡張メソッドにすれば、きれいすっきり。
「選択なし」の項目を含めるかそうでないかも、すっきりかける。
拡張メソッドやその他もろもろは、ここにのってた
あと、SelectListとSelectListItemの関係。
SelectList -- MultiSelectList -- IEnumerable
ほか
Postした後に、検証失敗等で画面に戻るときに、SelectListItemがnullになる件。
またデータをひっぱってくるか、TempDataを利用するか?
フィルタ属性…まではいかなくてもいいかも。