2017-03-09 230 views
-1

我想在mvc的布局页面中动态加载菜单。在布局页面中动态加载菜单asp.net mvc5?

我已经创建了Viewcode,菜单和菜单项的模型。现在我想要的是我想动态加载菜单。它必须从数据库中检索数据并在布局页面中加载。

我的模型

菜单模型

public Menu() 
    { 
     MenuItems = new List<MenuItem>(); 
    } 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public List<MenuItem> MenuItems { get; set; } 

我的模型菜单项

public class MenuItem 
{ 
    public int Id { get; set; } 
    public int UserName { get; set; } 
    public string Name { get; set; } 
    public string ActionName { get; set; } 
    public string ControllerName { get; set; } 
    public string Url { get; set; } 
    public Menu ParentMenu { get; set; } 
} 

我控制器

public ActionResult Index() 
    { 
     var query = db.ApplicationNames.ToList(); 
     ViewBag.Menu = query; 
     return View(); 
    } 

现在我已经创建了模型和控制器代码。现在我想要进一步的指导,就是我如何在布局页面中显示这些应用程序名称。如果我点击菜单,它必须重定向到相应的页面。 其中许多人在部分视图中显示加载菜单,并在布局页面中调用该部分视图。但是如何在部分视图中加载菜单并将该菜单更改为ActionLink。我需要一些指导和解决方案来解决这个问题。任何人都可以理解我的问题并为我的问题提供解决方案。

谢谢..

回答

1

,您可以发送菜单列表局部视图让假设我有数据

var menu = new Menu(); 
menu.Name = "Main Menu"; 

var items= new List<MenuItem>(){new MenuItem {Name="FirstMenu",ControllerName = "Home",ActionName="Index"}}; 

Menu.MenuItems = items; 

    return View(menu); 

现在在我看来,我会添加基于给定的数据菜单

@model List<Models.Menu> 

<ul> 

       <li> 
        <a href="#"> 

         <span>@Model.Name</span> 

        </a> 
        <ul> 
         @foreach (var item in Model.MenuItems) 
         { 
          <li><a href="@Url.Action(@item.ActionName , @item.ControllerName)"><i class="fa fa-circle-o"></i>@item.Name</a></li> 
         } 
        </ul> 
       </li> 
    </ul> 
+0

usman我得到错误,你使用manuall控制器名称和行动名称你能告诉我如何使用数据库值在控制器和通过查看 –

+0

它只是例如你有数据f rom数据库MenuItem将填充控制器名称和操作名称 – Usman

+0

我的控制器代码public ActionResult Index(){var menu = new Menu(); menu.Name =“主菜单”; var query = db.ApplicationNames.Select(e => new {UID = e.UID,e.ApplicationName1})。 var name = query.ApplicationName1; var items = new List (){new MenuItem {Name =“FirstMenu”,ControllerName = uid,ActionName = name}}; menu.MenuItems = items; return PartialView(“MenuLayout”,menu);}} –