我正在尝试从 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 中以编程方式执行此操作,但到目前为止都失败了。由于我网站的主导航已经使用了动态菜单,我不希望在这个二级导航中使用它们。
代替使用 asp:Menu,我尝试在标签中构建代码:
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 菜单中,但是我已经尝试了数周来寻找解决方案。当然,我可能只是在搜索错误的关键字。