Asp.net mvc 3 ASP.NET MVC 3嵌套列表

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 我在网上搜索了一个简单易懂的例子,但没有找到任何我能理解的东西。如果有任何人可以指导我通过这将是非常感谢 您应该编辑您的问题或将其拆

我是MVC新手,需要一些指导。我正在尝试为网站创建一个垂直的多级菜单。菜单数据存储在具有以下结构的数据库表中:

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);
    }
}