2013-11-04 7 views
2

현재 노드의 상위 제목을 표시하고 싶습니다.MVCSiteMapProvider - 상위 노드의 제목 표시

사이트 맵 :

<mvcSiteMapNode title="Main Site Tile" controller="Home" action="Index"> 
    <mvcSiteMapNode title="Some site section" controller="Section" action="Index"> 
    <mvcSiteMapNode title="Some page" controller="Section" action="Page1" /> 
    <mvcSiteMapNode title="Some other page" controller="Section" action="Page2" /> 
    </mvcSiteMapNode> 
</mvcSiteMapNode> 

그래서, 내가 사용하여 제목 (일부 페이지) 보여줄 수있는 '페이지 1'에 :

Html.MvcSiteMap().SiteMapTitle() 

우수함. 그러나 내 _Layout 페이지에 상위 노드 (일부 사이트 섹션)의 제목을 표시하고 싶습니다. 따라서 'Page1'또는 'Page2'(또는 내포 된 중첩 된 뷰)를 보는 경우에도 동일하게 나타납니다.

이것이 가능합니까?

답변

5

SiteMapTitle 특성을 사용하여이 작업을 수행하고 대상을 ParentNode로 설정할 수 있습니다.

[MvcSiteMapProvider.Web.Mvc.Filters.SiteMapTitle("SomeKey", Target = AttributeTarget.ParentNode] 
public ViewResult Show(int blogId) { 
    ViewData["SomeKey"] = "This will be the title"; 

    var blog = _repository.Find(blogId); 
    return View(blog); 
} 

이렇게하면 메뉴 및 SiteMapPath의 링크 제목이 설정됩니다.

정적 SiteMaps 객체를 사용하여 프로그래밍 방식으로 노드에 액세스 할 수도 있습니다.

var theTitle = MvcSiteMapProvider.SiteMaps.Current.CurrentNode.ParentNode.Title; 

양자 택일로, 당신은 제목을 얻을 수있는 사이트 맵의 노드를 찾기 위해 FindSiteMapNodeFromKey("theKey") 방법을 사용할 수 있습니다.

+0

이것은 하나의 질문에 대한 훌륭한 해결책입니다. 특정 수준을 타겟팅 할 수 있습니까? 이것은 항상 부모를 보여 주지만 내 사이트 맵에 4 개의 레벨이 있다고 말하면서 나는 항상 내가 속한 노드의 두 번째 레벨을 보여주고 싶습니다. –

+0

관심있는 수준까지 .ParentNode.ParentNode를 사용하는 것 외에는 기본 제공 방법이 없습니다. 잠재적으로 사용자 정의 속성을 사용하여 제목을 표시 할 노드를 플래그 지정한 다음 플래그가있는 노드를 찾을 때까지 재귀 적으로 .ParentNode를 호출 할 수 있습니다. MvcSiteMapProvider_AttributesToIgnore에 사용자 정의 속성을 추가했는지 확인하십시오. 그렇지 않으면 쿼리 문자열에 추가됩니다. https://github.com/maartenba/MvcSiteMapProvider/wiki/Using-Custom-Attributes-on-a-Node – NightOwl888

관련 문제