2012-04-18 65 views
0

我想從SiteMap文件中構建一個垂直的靜態ASP菜單,其中一個節點的子項僅在它們或它們的父節點當前選中。例如,說我的網站地圖是:在一個靜態的ASP中顯示當前節點的子項:菜單

項目1
項目2
- Child2.1
- Child2.2
項目3
- Child3.1
- Child3.2

在家裏頁(Item1),我希望我的靜態菜單顯示爲:

項目1
項目2
項目3

的項目2或Child2.1頁面上進行了我,我想我的靜態菜單顯示爲:

項目1
項目2
- Child2.1
- Child2.2
項目3

我試圖在Menu_DataBound期間在母版頁中以編程方式執行此操作,但到目前爲止失敗了。由於我的網站的主導航已經使用動態菜單,我不希望在這個二層導航上使用它們。

代替使用的ASP:菜單,我已經試過了建設中的代碼標籤:

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 

這顯示正確的導航,如果我在頂級鏈接(項目2, Item3),但如果我選擇一個子頁面則會失敗。

如果已在其他地方回答了此問題,我表示誠摯的歉意。這似乎是一個相當基本的要求,應該內置到ASP菜單中,但是我已經嘗試了幾個星期來找到解決方案。當然,我可能只是在搜索錯誤的關鍵字。

回答

0

想通了。分享更大的利益。這會在MenuItemDataBound事件期間評估菜單中的每個項目,檢查項目是否爲子項,檢查它是否位於活動節點中,如果不是,則移除它。

<script runat="server"> 
Protected Sub Menu1_MenuItemDataBound(sender As Object, e As System.Web.UI.WebControls.MenuEventArgs) Handles Menu1.MenuItemDataBound 
    If e.Item.Parent IsNot Nothing Then 
     If e.Item.Parent.Text <> SiteMap.CurrentNode.Title And e.Item.Parent.Text <> SiteMap.CurrentNode.ParentNode.Title Then 
      e.Item.Parent.ChildItems.Remove(e.Item) 
     End If 
    End If 
End Sub 
</script> 

確保您的菜單設置爲顯示兩個StaticDisplayLevels,例如:

<asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1" IncludeStyleBlock="False" 
    MaximumDynamicDisplayLevels="0" SkipLinkText="" StaticDisplayLevels="2"> 
相關問題