Asp.net mvc 3 ASP.NET MVC 3嵌套列表
我是MVC新手,需要一些指导。我正在尝试为网站创建一个垂直的多级菜单。菜单数据存储在具有以下结构的数据库表中:Asp.net mvc 3 ASP.NET MVC 3嵌套列表,asp.net-mvc-3,Asp.net Mvc 3,我是MVC新手,需要一些指导。我正在尝试为网站创建一个垂直的多级菜单。菜单数据存储在具有以下结构的数据库表中: ID、categoryName、parentID 如何使用常规ADO.NET和MVC实现这一点?据我所知,我需要创建一个MenuItem类,该类具有int-ID、字符串名和列出子属性。然后我需要创建这个类的实例来表示垂直菜单,然后我需要为视图生成HTML 我在网上搜索了一个简单易懂的例子,但没有找到任何我能理解的东西。如果有任何人可以指导我通过这将是非常感谢 您应该编辑您的问题或将其拆
ID、categoryName、parentID
如何使用常规ADO.NET和MVC实现这一点?据我所知,我需要创建一个MenuItem
类,该类具有int-ID
、字符串名
和列出子属性。然后我需要创建这个类的实例来表示垂直菜单,然后我需要为视图生成HTML
我在网上搜索了一个简单易懂的例子,但没有找到任何我能理解的东西。如果有任何人可以指导我通过这将是非常感谢 您应该编辑您的问题或将其拆分为更具体的问题
我将在您的评论中回答关于如何递归加载菜单项的具体问题
您编写了使用常规ADO.NET的程序。我可以自由地在示例代码中使用dapper,这让生活变得更轻松:
这是您的MenuItem类:
public class MenuItem
{
public int Id { get; set; }
public int? ParentId { get; set; }
public List<MenuItem> Children { get; set; }
}
我假设您将有一个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);
}
}
私有静态void loadChildren(MenuItem currentItem,
IEnumerable allItems)
{
currentItem.Children=allItems
.Where(m=>m.ParentId==currentItem.Id).ToList();
foreach(currentItem.Children中的var childItem)
{
加载子项(子项、所有项);
}
}
首先,我会找到一个HTML和CSS示例,创建一个您想要的菜单。然后我会集中精力起草一个代表菜单项的模型。最后,处理视图本身,它结合了模型和您设计的HTML。除了@SergioTapia所说的,因为您要将这些菜单项存储到数据库中,您可能还需要一个关于ADO.NET的教程来获取它们。如果您在其中一项任务中遇到一些困难,请毫不犹豫地问一个特定的问题。目前我唯一的问题是找到一种递归填充menuItem对象的方法。这就是我一直在寻找的!谢谢大家在这方面的帮助。
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);
}
}