ASP.NET Coreでアプリケーションを作成しております。
_Layout.cshtmlに共通のヘッダーとフッターを定義して、@RenderBody()でコンテンツを切り替えていくことを想定します。
今回、共通ヘッダーにメニューを設け、その内容をDB取得値で可変にしたいと考えております。
_Layout.cshtml
<div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> /* @Model.MenuItems(List<Item>)の内容でメニューを作成 */ @foreach (var item in @Model.MenuItems) { <a asp-controller=@Model.Controller asp-action=@Mode.Action>@Mode.Name</a> } </ul> </div> </div> </div>
初回表示ではHomeControllerのIndexが実行され、関数内でメニュー内容を作成し、Modelに渡しているため可変メニューが正常に表示されますが、他のControllerに移動するとModelがnullとなってしまい、共通ヘッダーの可変メニューが表示できません。
WEBであったサンプルでメニュー内容をBaseModelに記載し、各画面のModelはBaseModelを継承する形のものも試してみましたが、入力検証を含んでいる画面では画面表示時に「必須入力です」などの検証が働いてしまいうまく動作しませんでした。
AccountController.cshtml
C#
1[HttpGet] 2public IActionResult Login(LoginViewModel model) 3{ 4 // メニューをmodelに設定する処理 5 6 return View(model); 7}
表題のような実装を実現する方法について、お知恵を拝借できれば幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。