ページの読み込み時にメニューコレクションのメニューアイテムをループし(アイテムはハードコーディングされているため、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のインデックスを取得する方法に困惑しています。