C# ASP.Net LINQ中的数据库驱动嵌套菜单

C# ASP.Net LINQ中的数据库驱动嵌套菜单,c#,asp.net,linq,menu,menuitem,C#,Asp.net,Linq,Menu,Menuitem,嗨,我正在尝试解决这个问题,我正在从数据库中获取数据并创建菜单: if (Context.User.IsInRole("Admin") == true) { mnMenu.Items.Clear(); List<menuRole> menuParentList = new List<menuRole>(); List<MenuItem> menuItem

嗨,我正在尝试解决这个问题,我正在从数据库中获取数据并创建菜单:

  if (Context.User.IsInRole("Admin") == true)
  {


                mnMenu.Items.Clear();
                List<menuRole> menuParentList = new List<menuRole>();
                List<MenuItem> menuItemList = new List<MenuItem>();
                List<MenuItem> hoverItem = new List<MenuItem>();
                int parentPosition = 0;
                string menuName;

                menuParentList = roles.getMenuItems().ToList();

                for (int i = 0; i < menuParentList.Count; i++)
                {
                    if (menuParentList[i].menuType == "Admin")
                    {
                        if (menuParentList[i].MenuRole1 == "parent")
                        {
                            menuName = menuParentList[i].menuName.ToString();
                            menuItemList[i].Text = menuName;
                            parentPosition = i;
                        }
                        else if (menuParentList[i].MenuRole1 == "child")
                        {
                           hoverItem[i].Text = menuParentList[i].menuName;
                           hoverItem[i].NavigateUrl = menuParentList[i].MenuLink;
                           menuItemList[i].ChildItems.Add(hoverItem[i]);
                        }
                    }
                }
                mnMenu.Items.Add(menuItemList[0]);
                mnMenu.Items.Add(menuItemList[1]);
                mnMenu.Items.Add(menuItemList[2]);

      }

嗯,这似乎做出了一些(太多)假设:

  mnMenu.Items.Add(menuItemList[2]);
你应该检查一下你有多少东西


对HoverItem也一样


编辑,取3

不能使用
i
为menuList和hoverItem集合编制索引,它们不会每一步都增长

    if (menuParentList[i].MenuRole1 == "parent")
    {
        menuName = menuParentList[i].menuName.ToString();
        var newItem = new MenuItem();
        newItem.Text = menuName;
        menuItemList.Add(newItem);                             
        parentPosition = menuItemList.Count-1;   // flaky
    }
    else if (menuParentList[i].MenuRole1 == "child")
    {
        var newItem = new MenuItem();
        newItem.Text = menuParentList[i].menuName;
        newItem.NavigateUrl = menuParentList[i].MenuLink;
        hoverItem.Add(newItem);                             

        //menuItemList[i].ChildItems.Add(hoverItem[i]);
        menuItemList[parentPosition].ChildItems.Add(newItem);  // I think
    }

我在这行代码中得到错误:menuItemList[i].Text=menuName;对,我发现了。请参见Edit.well,它对父项运行良好,但悬停项上仍会出现相同的错误:S else if(menuParentList[i]。MenuRole1==“child”){hoverItem.Add(new MenuItem());hoverItem[i]。Text=menuParentList[i].menuName;hoverItem[i].NavigateUrl=menuParentList[i].MenuLink;menuItemList[i].ChildItems.Add(hoverItem[i]);}正确,我将更改我的答案。效果很好只是一些小的更改谢谢!你是最棒的!!menuItemList[i].Text=menuName;这将添加父标题的名称。
if (menuParentList[i].MenuRole1 == "parent")
{
  menuName = menuParentList[i].menuName.ToString();
  menuItemList.Add(new MenuItem());  // add this 
  menuItemList[i].Text = menuName;
  parentPosition = i;
}
    if (menuParentList[i].MenuRole1 == "parent")
    {
        menuName = menuParentList[i].menuName.ToString();
        var newItem = new MenuItem();
        newItem.Text = menuName;
        menuItemList.Add(newItem);                             
        parentPosition = menuItemList.Count-1;   // flaky
    }
    else if (menuParentList[i].MenuRole1 == "child")
    {
        var newItem = new MenuItem();
        newItem.Text = menuParentList[i].menuName;
        newItem.NavigateUrl = menuParentList[i].MenuLink;
        hoverItem.Add(newItem);                             

        //menuItemList[i].ChildItems.Add(hoverItem[i]);
        menuItemList[parentPosition].ChildItems.Add(newItem);  // I think
    }