2011-12-31 56 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