2012-04-18 4 views
0

노드의 하위 항목이 표시되는 SiteMap 파일에서 수직적 인 정적 ASP 메뉴를 작성하려고합니다. 현재 선택됨. 예를 들어, 내 사이트 맵은 말 :정적 ASP에서 현재 노드의 하위 항목 표시 : 메뉴

항목 1
항목 2
- Child2.1
- Child2.2
항목 3
- Child3.1
- 홈에 Child3.2

페이지 (항목 1)에서 정적 메뉴를 다음과 같이 나타내겠습니다.

항목 1
항목 2
항목 3

이 항목 2 또는 Child2.1 페이지에서 I를 있었, 내 정적 메뉴를 표시 할뿐만 :

항목 1
항목 2
- Child2.1
- Child2.2
항목 3

Menu_DataBound 동안 MasterPage에서 프로그래밍 방식으로이 작업을 수행하려고했지만 지금까지 실패했습니다. 내 사이트의 주요 내비게이션은 이미 동적 메뉴를 사용하기 때문에 두 번째 계층 탐색에이 메뉴를 사용하고 싶지 않습니다. 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> 

하면 메뉴가, 예컨대 :

<asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1" IncludeStyleBlock="False" 
    MaximumDynamicDisplayLevels="0" SkipLinkText="" StaticDisplayLevels="2"> 
이 StaticDisplayLevels를 표시하도록 설정되어 있는지 확인