2012-08-17 99 views
8

我在項目中使用ASP.NET MVC SiteMap提供程序,它運行良好。然而,我試圖弄清楚如何隱藏一個菜單項,但我很困難。我想隱藏在全局導航中的菜單項是我的「站點地圖」頁面。現在我知道有一種叫做VisibilityProvider的東西可以在mvcSiteMapNode上找到 - 但我似乎無法弄清楚如何使它工作。ASP.NET MVC SiteMap提供程序 - 如何在實際菜單中隱藏單個項目

回答

5

首先,我建議你閱讀這個維基頁面:Creating a Custom SiteMapNodeVisibilityProvider。然後指向你的網站導航頁面的特定節點,這種方式聲明它:

<mvcSiteMapNode title="Site Map" controller="Home" action="Map" visibility="false" /> 

現在,實現IsVisible方法(在上面鏈接的wiki頁面所示)時,你可以這樣做:

string visibility = mvcNode["visibility"]; 

// Is a visibility attribute specified? 
if (!string.IsNullOrEmpty(visibility)) 
{ 
    isVisible = Convert.ToBoolean(mvcNode["visibility"]); 

    if (!isVisible) 
    { 
      return false; 
    } 
} 

return true; 
6

從我的答案中解釋瞭如何隱藏節點和可用選項。

https://stackoverflow.com/a/27095721/853295

你應該用在如何隱藏節點

https://github.com/maartenba/MvcSiteMapProvider/wiki/Advanced-Node-Visibility-with-ISiteMapNodeVisibilityProvider

某些設置這個指南,你可以從上面的鏈接設置:一旦你添加了

<appSettings> 
    <!-- Visibility will not filter to children --> 
    <add key="MvcSiteMapProvider_VisibilityAffectsDescendants" value="false"/> 
    <!-- Set default visibility provider --> 
    <add key="MvcSiteMapProvider_DefaultSiteMapNodeVisibiltyProvider" value="MvcSiteMapProvider.FilteredSiteMapNodeVisibilityProvider, MvcSiteMapProvider"/> 
</appSettings> 

應用程序設置,將以下內容添加到您想要在麪包屑中查看但不在菜單中的任何節點:

visibility="SiteMapPathHelper,!*"(SiteMapPathHelper - 節點是在的SiteMapPath可見,* - 這是所有其他控件看不見!)

如:

<mvcSiteMapNode title="Administration" area="Admin" clickable="false" visibility="SiteMapPathHelper,!*" /> 

其他方案可供選擇:

類型 .......................... 它影響什麼
CanonicalHelper ....... Canonical HTML Helper
MenuHelper ..............菜單HTML助手
MetaRobotsHelper .... Meta機器人HTML助手
SiteMapHelper .......... SiteMap HTML助手
SiteMapPathHelper ...的HTML的SiteMapPath助手
SiteMapTitleHelper ...標題HTML輔助
XmlSiteMapResult ....的/sitemap.xml端點

+0

這是最簡單的解決方案的站點地圖XML輸出,因爲它不需要額外的代碼。 – 2015-01-09 11:26:35