2011-12-31 39 views
0

嗨即时试图解决这个问题,我获取数据并创建菜单:现在数据库从数据库驱动的嵌套菜单在ASP.Net LINQ

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

     } 

它给我这个异常的时刻:

System.ArgumentOutOfRangeException was unhandled by user code 
    Message=Index was out of range. Must be non-negative and less than the size of the collection. 
Parameter name: index 
    Source=mscorlib 
    ParamName=index 
    StackTrace: 
     at System.ThrowHelper.ThrowArgumentOutOfRangeException() 
     at System.Collections.Generic.List`1.get_Item(Int32 index) 
     at PresentationLayer.UserControls.Menu.Page_Load(Object sender, EventArgs e) in C:\Users\Kurt\documents\visual studio 2010\Projects\aaa\PresentationLayer\UserControls\Menu.ascx.cs:line 44 
     at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) 
     at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) 
     at System.Web.UI.Control.OnLoad(EventArgs e) 
     at System.Web.UI.Control.LoadRecursive() 
     at System.Web.UI.Control.LoadRecursive() 
     at System.Web.UI.Control.LoadRecursive() 
     at System.Web.UI.Control.LoadRecursive() 
     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    InnerException: 
+0

你能指出44行? – 2011-12-31 11:53:59

+0

menuItemList [i] .Text = menuName;这会添加父标题的名称。 – Mazda 2011-12-31 11:57:46

回答

1

那么,这似乎让少数(太多)假设:

mnMenu.Items.Add(menuItemList[2]); 

您应该检查多少项目,你摹OT。


if (menuParentList[i].MenuRole1 == "parent") 
{ 
    menuName = menuParentList[i].menuName.ToString(); 
    menuItemList.Add(new MenuItem()); // add this 
    menuItemList[i].Text = menuName; 
    parentPosition = i; 
} 

与同为HoverItem。


编辑,取3

不能使用i索引的菜单列表和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 
    } 
+0

Im在这行代码中得到错误:menuItemList [i] .Text = menuName; – Mazda 2011-12-31 11:55:26

+0

对,我发现它。请参阅编辑。 – 2011-12-31 11:59:04

+0

以及它工作得很好父,但在悬停项目仍然给出了同样的错误:S 否则,如果(menuParentList [I] .MenuRole1 ==“孩子”) { hoverItem.Add(新菜单项()) ; hoverItem [i] .Text = menuParentList [i] .menuName; hoverItem [i] .NavigateUrl = menuParentList [i] .MenuLink; menuItemList [i] .ChildItems.Add(hoverItem [i]); } – Mazda 2011-12-31 12:01:49