创建从数据库构造的动态菜单

时间:2016-12-08 17:34:14

标签: sql asp.net asp.net-mvc menu

我在Asp.Net MVC工作,我想从数据库填充菜单,但我真的不知道如何在每个菜单中插入子菜单,以及每个子菜单都可以有另一个子菜单等。

我有类似facebook评论和回复模式的东西。

首先,我有以下菜单模型:

public int MenuId { get; set; }
      public string Name { get; set; }
      public string Controller { get; set; }
      public string Action { get; set; }
      public int Order { get; set; }
      public string Icon { get; set; }
      public bool IsAdmin { get; set; } 

子菜单:

public int SubMenuId { get; set; }
      public int MenuId { get; set; } // Menu Fk
      public string Name { get; set; }
      public string Controller { get; set; }
      public string Action { get; set; }
      public int Order { get; set; }
      public string Icon { get; set; }
      public bool IsAdmin { get; set; } 

这是我的逻辑吗?有人实施类似的东西吗?我需要做什么才能使控制器工作?如果有人有一个例子我真的对它有所了解。在此先感谢

2 个答案:

答案 0 :(得分:0)

传统的方法是只拥有您的Menu模型,并且可以使用ParentMenuId。如果ParentMenuId为空,则您的菜单是根节点。您可以设置导航属性,以便从每个Menu节点访问.Children以获取指向它的所有节点。

答案 1 :(得分:0)

我相信@Dobbins有正确的想法。在数据库中,您可以拥有一个MenuLink表:

MenuLink
- ID int IDENTITY(1,1) NOT NULL <- Primary Key
- ParentId int NULL <- Foreign Key
- OrderNumber int
- LinkUri varchar(1024) <- Can be replaced with Controller, Action 
- IconUri varchar(1024)
- Text nvarchar(256)

然后,您可以从数据库中选择所有菜单链接及其子链接。

您的菜单对象可以有一个菜单对象列表:

public class MenuLink 
{
   int Id { get; set; }
   int ParentId { get; set; }
   int OrderNumber { get; set; }
   Uri LinkUri { get; set; } 
   Uri IconUri { get; set; }
   string Text { get; set; }
   IList<MenuLink> SubMenuItems { get; set; }
}

现在您可以使用razor或您选择的JavaScript框架在代码中创建动态菜单。