对于每个MenuItem RemoveAt

时间:2013-02-22 06:07:17

标签: asp.net vb.net menuitem

我开发了一个基本系统,通过页面加载菜单集中的菜单项循环(项目是硬编码的,所以不能使用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的索引才能这样做。

1 个答案:

答案 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并删除内部的项目,因为您将获得有关修改正在循环的数组的异常。