我开发了一个基本系统,在页面加载时循环遍历菜单集合中的菜单项(项目是硬编码的,因此不能使用 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)但我为了做到这一点,我很难过如何获取菜单项的索引。