ASP.NET Core MVC MySQLのテーブルの内容をDropDownListにしてみた
Webシステムの開発をしていると、テーブルの内容をDropDownListにすることは
よくあることです。マスターデータなんか特にそうですよね。
で、ASP.NET Core MVCのことを色々と考えたり調べたりするのに飽きたので
サクッとコードを書いて、動いたーって喜んでみようと
DropDownListを試してみました。
そーしたら予想外にまたまたハマってしまいました。
まったく、初めてのことはことごとくハマってしまっています。
色々と苦労した結果動いたソース群を記しておきます。
いつものごとく、Visual Studio Community 2017 for Mac で動作確認しています。
自分なりにがんばってみた結果ですので、ASP.NET Core MVCの作法に合っているか不明です。
あくまでも参考程度にしてください。
やりたいことは、
Entity Frameworkを使ってMySQLのテーブルのデータを取得して
DropDownListを表示したい。
DropDownListに表示させたいModel
public class ItemGrp { public int Id { get; set; } public string ItemGrpName { get; set; } }
DropDownList用のViewModelを作成
DropDownListに表示させるためにはViewModelが必要だったのです。POSTで受け取った時の値も入ります。
public class ItemGrpViewModel { [Required] public int ItemGrpList { get; set; } }
Controllerを準備します
DbContextからItemGrpのidと名称をを取得して、ViewBagへセットします。public IActionResult Index() { ViewBag.SelectOptions = _context.ItemGrp.ToArray().Select(m => new SelectListItem() { Value = m.Id.ToString(), Text = m.ItemGrpName }); return View(); }
Viewsを準備します
最後にViewへ @Html.DropDownListFor を使って表示します。@Html.DisplayNameFor(model => model.ItemGrpList) @Html.DropDownListFor( model => model.ItemGrpList, (IEnumerable<SelectListItem>)ViewBag.SelectOptions, " 選択してください ", new { @class = "form-control" } )
最終的にDropDownListに対応するViewModelを準備することで
動いてくれましいた。
ViewをFormタグでくくって、POSTでサーバーへ渡した時に
[HttpPost]
public IActionResult Index(ItemGrpViewModel model)
このように、
コンストラクタにViewModelを定義することで値が取得できることもわかりました。
やっぱりViewにはバインドさせるModelが必要なのですね。
仕事の気分転換に、自立式ハンモック
以前からハンモックに憧れていたのですが。屋内で使える自立式ハンモックがあるのですね。
どんなのが良いのかわからないので、1万円を切るくらいのを買ってみました。
想像していたより気持ちがいいです。
特に左右に揺らすととても気分が癒やされます。
プログラムでハマった時に気持ちを落ち着けることができそうです。