1

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

4

1 回答 1

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 并删除其中的项目,因为您将收到关于修改循环数组的异常。

于 2013-02-22T08:26:19.580 回答