ノードの子項目が現在選択されている場合にのみ表示される、SiteMap ファイルから垂直方向の静的 ASP メニューを作成しようとしています。たとえば、私の SiteMap が次のようになっているとします。
Item1
Item2
- Child2.1
- Child2.2
Item3
- Child3.1
- Child3.2
ホームページ (Item1) で、静的メニューを次のように表示します。
アイテム1
アイテム2
アイテム3
Item2 または Child2.1 ページにいた場合、静的メニューを次のように表示します。
Item1
Item2
- Child2.1
- Child2.2
Item3
Menu_DataBound 中に MasterPage でこれをプログラムで実行しようとしていますが、これまでのところ失敗しています。私のサイトのメイン ナビゲーションは既に動的メニューを採用しているため、この第 2 層のナビゲーションには採用したくありません。
asp:Menu を使用する代わりに、Label でコードを作成してみました。
Protected Sub LeftNavMenu_DataBound(sender As Object, e As System.EventArgs) Handles
LeftNavMenu.DataBound
If LeftNavMenu.Items.Count > 0 Then
Dim item As MenuItem
For Each item In LeftNavMenu.Items
DisplayChildMenuText(item)
Next
Else
lblNav.Text = "The Menu control does not have any items."
End If
End Sub
Sub DisplayChildMenuText(ByVal item As MenuItem)
If item.Selected Then
lblNav.Text &= "<li><span class=""active""></span><a href=""" & item.NavigateUrl & """>" & item.Text & "</a></li>"
If item.ChildItems.Count > 0 Then
Dim childItem As MenuItem
lblNav.Text &= "<ul>"
For Each childItem In item.ChildItems
lblNav.Text &= "<li><a href=""" & childItem.NavigateUrl & """>" & childItem.Text & "</a></li>"
Next
lblNav.Text &= "</ul>"
End If
Else
lblNav.Text &= "<li><a href=""" & item.NavigateUrl & """>" & item.Text & "</a></li>"
End If
End Sub
最上位のリンク (Item2、Item3) にいる場合は正しいナビゲーションが表示されますが、子ページを選択すると失敗します。
これが他の場所で回答されている場合は、心からお詫び申し上げます。これはかなり初歩的な要求であり、ASP メニューに組み込まれるべきもののように思えますが、解決策を見つけるために何週間も試みました。確かに、間違ったキーワードを検索しているだけかもしれません。