2011-02-18 4 views
0

현재 ASP.net 3.5 (vb.net) 페이지에 대한 사이트 이동 경로를 생성하기 위해 SiteMapPath를 사용하고 있습니다.SiteMapPath를 사용하여 동적 페이지 제목을 만드시겠습니까?

이제 동적 페이지 제목을 (태그에서) 빌드하는 데 동일한 컨트롤을 사용할 수있는 방법을 알아 내려고 노력 중입니다. 리버스 경로를 나열하고 싶지만 SiteMapPath 컨트롤에는 링크와 스타일링 범위가 포함됩니다. 그 모든 것을 제거 할 수있는 방법이 있는가? 단락 기호로 일반 경로를 얻는가?

예를 들어, 내 사이트의 "정보"섹션에있는 "보도 자료"페이지에 있습니다. 그래서

회사 명 - 약 -

보도 자료 : 나는 페이지 제목이 될 갖고 싶어 보도

자료>

홈> 소개 :

탐색 경로로 나타난다 모든 스팬, 링크 및 스타일링 (태그 안쪽에 있기 때문에)을 삭제하고 루트 노드 "홈"을 삭제 한 다음 회사 이름을 끝에 추가해야합니다. 내 메뉴 탐색과 빵 부스러기가 모두 사이트 맵 파일에서 유도 되었기 때문에 제목을 동일하게 만드는 것이 합리적이라고 생각했습니다.

의견이 있으십니까? 감사.

+0

내 대답은 문제를 해결하는 데 도움이나요? – PhillFox

답변

1

원하는 출력을 얻는 가장 좋은 방법은 SitePath 컨트롤을 무시하고 대신 SiteMap의 SiteMapNode 컬렉션을 사용하는 것입니다. 서버는 web.sitemap을 SiteMapNodes 컬렉션으로 구문 분석하고 현재 페이지의 URL과 일치하는 노드를 찾아 SiteMap.CurrentNode를 연결합니다. 각 SiteMapNode에는 ParentNode 속성이 있습니다. Here is the reference page on MSDN.

CurrentNode의 제목에 CurrentNode의 제목을 추가하고 RootNode에 도달 할 때까지 계속하면 CurrentNode에 부모가 있는지 확인하기 만하면됩니다 (여기서 루트로 회사 이름을 대체하십시오) 노드의 제목).

다음은 빠른 해결책입니다. 마스터 페이지를 사용하는 경우 마스터 페이지로 이동할 수 있습니다. 귀하의 언어가 확실하지 않지만, VB.Net에서 쉽게 다시 작성해야합니다. 나는 그것을 간단한 시험을했고 그것은 작동하는 것처럼 보였다. 페이지 제목을 구분하는 문자를 사용자 정의 할 수 있습니다. 도움이

protected void Page_Load(object sender, EventArgs e) 
{ 
    Page.Title = SiteMapTitle(SiteMap.CurrentNode, "", " - "); 
} 

private string GetNodeTitle(SiteMapNode oNode) 
{ 
    if (oNode == SiteMap.RootNode) 
     return "Company Name"; 
    else 
     return oNode.Title; 
} 

private string SiteMapTitle(SiteMapNode oNode, string szTitle, string szItemSeparator) 
{ 
    if (szTitle != string.Empty) 
     szTitle = szTitle + szItemSeparator + GetNodeTitle(oNode); 
    else 
     szTitle = GetNodeTitle(oNode); 

    if (oNode.ParentNode != null) 
     szTitle = SiteMapTitle(oNode.ParentNode, szTitle, szItemSeparator); 

    return szTitle; 
} 

희망 ...

관련 문제