我是MVC世界的新手,需要一些指导。我正在尝试为网站创建一个垂直的多级菜单。菜单的数据存储在具有以下结构的数据库表中:
ID, categoryName, parentID
如何使用常规ADO.NET和MVC进行此操作?据我所知,我需要使用MenuItem
,int ID
和string name
属性制作List<MenuItem> Children
课程。然后我需要创建和表示垂直菜单的类的实例,然后我需要为视图生成HTML。
我在网上搜索了一个易于理解的例子,但我找不到任何我能理解的内容。如果那里有任何人可以指导我完成这一点,那将是非常有用的!
答案 0 :(得分:2)
您应该编辑您的问题或将其拆分为更具体的问题。
我将在评论中回答有关如何递归加载MenuItem的具体问题。
您写的是使用常规ADO.NET。我可以在我的示例代码中自由使用dapper,这会让生活变得更轻松:
所以这是MenuItem类:
public class MenuItem
{
public int Id { get; set; }
public int? ParentId { get; set; }
public List<MenuItem> Children { get; set; }
}
现在我们打开一个连接并将整个MenuItems
表加载到一个集合中:
SqlConnection conn = new SqlConnection("...");
conn.Open();
IEnumerable<MenuItem> allItems = conn.Query<MenuItem>("SELECT * FROM MenuItems");
我假装你有一个MenuItem作为ParentId = null
的根项目。让我们找到它:
MenuItem rootMenu = allItems.Single(m => m.ParentId == null);
我们要做的最后一件事是重新排列分层树中的项目。我们使用递归工作的函数来执行此操作:
loadChildren(rootMenu, allItems);
这是功能。它只是查找传递项目的子项,并在所有找到的子节点上调用自己:
private static void loadChildren(MenuItem currentItem,
IEnumerable<MenuItem> allItems)
{
currentItem.Children = allItems
.Where(m => m.ParentId == currentItem.Id).ToList();
foreach (var childItem in currentItem.Children)
{
loadChildren(childItem, allItems);
}
}