0
Answer

How to pass the Menu model to all page commonly using _layout ?

Photo of Karthik K

Karthik K

9h
46
1

this is my  _Layout.cshtml   page : 
<header>
    <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
        <div class="container">
            <a class="navbar-brand" asp-area="" asp-page="/Index">DyMenu</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                    aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            @Html.Partial("_PartialMenu")
        </div>
    </nav>
</header>
 
<div class="container">
    <main role="main" class="pb-3">
        @RenderBody()
    </main>
</div>
This is my   _PartialMenu.cshtml Page 
@using DyMenu.Pages
@model DyMenu.Pages.IndexModel 
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    
</body>

<nav class="navbar navbar-inverse">
    <div class="container-fluid">
        <div class="navbar-header">
            
        </div>
            @foreach (var item in Model.menuItems)
            {
               <ul class="navbar-nav flex-grow-1">
                  <li class="nav-item">  <a class="nav-link text-dark" asp-area="" asp-page="/@item.Url"> @item.Title </a> </li>
               </ul> 
             
            }
    </div>
 </nav>
</html>

 This is my Index.cshtml.cs  page . 
    public class IndexModel : PageModel
    {
        #region  Declartion 
        private IMenuItemAccess _menuItemAccessDA;
        private readonly IConfiguration _configuration;
        #endregion
        public IndexModel(IConfiguration configuration)
        { 
         _configuration = configuration;
        }
        [BindProperty]
        public IEnumerable<MenuItem> menuItems { get; set; }
        [BindProperty]
        public MenuItem menuItemobj { get; set; }
        public void OnGet()
        {
            GetMenu();
        }
        public IEnumerable<MenuItem> GetMenu()
        {
            string dbconnection = Utilities.InitializeConnectionString(_configuration);
            _menuItemAccessDA = new MenuItemAccess(dbconnection);
            menuItems = _menuItemAccessDA.GetMenuList();
            ViewData["MenuModelData"] = menuItems;
            return menuItems;
        }

       database : Menu 

       1, 0, 'Index', 'Index'
       2, 0, 'Privacy', 'Privacy'
       3, 0, 'Service', 'Service'
       4, 0, 'Products', 'Products'
       5, 0, 'Register', 'Register'
     Other than index page not working . the following error thrown we i run . can anyone suggest with solution 
     Here Menu item is generated from index.cshtml.somewhere in this part made mistake. i am not sure how to pass the 
     menuitem model  commonly   
     Error : 
     InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'DyMenu.Pages.ProductsModel', 
     but this ViewDataDictionary instance requires a model item of type 'DyMenu.Pages.IndexModel'.
     Thanks in advance 
     Karthik.K