2011-12-31 2 views
0

안녕하세요 메신저이 문제를 해결하기 위해 노력하고, 내가 가져 오는거야 데이터를 중첩 메뉴를 구동하고 메뉴 생성 : 지금데이터베이스는 DB에서 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 번째 줄을 지적 할 수 있습니까? –

+0

menuItemList [i]. 텍스트 = menuName; 이것은 상위 헤더의 이름을 추가합니다. – Mazda

답변

1

글쎄,이 몇 가지 (너무 많은) 가정 할 것 같다

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

당신은 확인해야합니다을 얼마나 많은 항목 당신 g 오.


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

그리고 HoverItem에 대해 동일한

.


편집, 그들은 모든 단계 성장하지 않습니다, 당신은 인덱스에 menulist 요소와 hoverItem 컬렉션을 i을 사용할 수 없습니다 3.

을.

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

이 코드 줄에서 오류가 발생했습니다. menuItemList [i] .Text = menuName; – Mazda

+0

맞아, 나는 그것을 발견했다. 편집을 참조하십시오. –

+0

잘 부모를 위해 잘 작동하지만, 호버 항목 위에 여전히 같은 오류 제공 : S 를 다른 경우 (menuParentList [i]를 .MenuRole1 == "아이") { hoverItem.Add (없는 새로운 MenuItem()) ; hoverItem [i]. 텍스트 = menuParentList [i] .menuName; hoverItem [i] .NavigateUrl = menuParentList [i] .MenuLink; menuItemList [i] .ChildItems.Add (hoverItem [i]); } – Mazda