我在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; }
这是我的逻辑吗?有人实施类似的东西吗?我需要做什么才能使控制器工作?如果有人有一个例子我真的对它有所了解。在此先感谢
答案 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框架在代码中创建动态菜单。