venerdì 9 luglio 2010

Asp.Net Menu: eliminare una voce a runtime

A volte capita di avere l'esigenza di eliminare dal menu di una web application in aspnet un menu (o un sottomenu) al verificarsi di qualche particolare condizione. Il problema è che il componente in questione non mette a disposizione a runtime un metodo per nascondere un menuitem. Ecco quindi come fare:

Protected Sub Menu1_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Menu1.PreRender
    If CONDIZIONE Then
        'elimino il menu che non mi serve
        Dim tot As Integer = Menu1.Items.Count - 1
        Dim i As Integer = 0
            While i <= tot
            Dim ss As MenuItem = Menu1.Items(i)
            If ss.Text.ToLower = "nome menu" Then
                'elimino i sotto menu
                Dim subtot As Integer = Menu1.Items(i).ChildItems.Count - 1
                Dim j As Integer = 0
                While j <= subtot
                    Menu1.Items(i).ChildItems.RemoveAt(0)
                    j += 1
                End While
                'elimino il menu
                Menu1.Items.Remove(ss)
                i = i - 1
                tot = tot - 1
            End If
            i += 1
        End While
    End If
End Sub