我开发了一个基本系统,通过页面加载菜单集中的菜单项循环(项目是硬编码的,所以不能使用rowdatabound事件)并禁用那些不符合特定用户级别标准的那些:
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
它运行良好并禁用它应该的所有菜单项而忽略其余的菜单项。问题是随着时间的推移,菜单项的数量已经增加,一些用户很难知道他们做了什么,无法访问。
我的理解是,menuitems没有可见属性,但可以删除(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.menuitemcollection.removeat.aspx),但我很难知道如何获取menuitem的索引才能这样做。
答案 0 :(得分: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并删除内部的项目,因为您将获得有关修改正在循环的数组的异常。