2013-02-22 58 views
1

我開發了一個基本系統,通過頁面加載菜單集合中的菜單項(項目是硬編碼的,因此不能使用rowdatabound事件)並禁用那些不符合特定用戶級別的菜單項條件:for each MenuItem RemoveAt

 For Each item As MenuItem In NavigationMenu.Items 

      Dim value As Int32 = Convert.ToInt32(item.Value) 
      Dim level As Int32 = Convert.ToInt32(Session.Item("uxID")) 

      If value > level Then item.Enabled = False 

     Next 

它工作的很好,並禁用所有應該忽略的菜單項。問題在於,隨着時間的推移,菜單項的數量不斷增加,而且一些用戶很難知道他們所做的和無法訪問的內容。

我的理解是,菜單項沒有可見屬性,但可以刪除(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.menuitemcollection.removeat.aspx),但我難以接受如何獲取菜單項的索引。

+0

您希望在哪個事件中獲得菜單項的索引? – 2013-02-22 06:15:25

回答

2

只是做相同的:

Dim i As Integer = 0 

While i < NavigationMenu.Items.Count 
    Dim value As Int32 = Convert.ToInt32(NavigationMenu.Items(i).Value) 
    Dim level As Int32 = Convert.ToInt32(Session.Item("uxID")) 

    If value > level Then : NavigationMenu.Items.RemoveAt(i) 
    Else : i += 1 
    End If 
End While 

請記住,您可以做一個foreach和刪除裏面的物品,因爲你會得到有關修改該循環陣列異常。

+0

工作就像一個魅力,謝謝。 – 2013-02-23 02:49:11