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)が、私はそうするためにmenuitemのインデックスを取得する方法に困惑しています。

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 に答える