2013-11-04 89 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> 

因此,在 '第一頁' 我可以顯示使用標題(有些頁):

Html.MvcSiteMap().SiteMapTitle() 

大。但是,我也想在我的_Layout頁面中顯示父節點的標題(Some site section),所以如果我正在查看'Page1'或'Page2'(或者實際上嵌套在其中的任何視圖),這看起來是相同的。

這可能嗎?

回答

5

您可以使用SiteMapTitle屬性執行此操作,並將Target設置爲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); 
} 

這將設置Menu和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

相關問題