プロジェクトでASP.NET MVC SiteMapプロバイダを使用していて、うまく動作しています。しかし、私はメニュー項目を隠す方法を理解しようとするのに苦労しています。グローバルナビゲーションに表示しないようにするメニュー項目は、私の「サイトマップ」ページです。今私はVisibilityProvider
という名前のものがmvcSiteMapNodeで利用可能であることを知っていますが、それを動作させる方法を理解できないようです。ASP.NET MVC SiteMapプロバイダ - 実際のメニューで単一アイテムを非表示にする方法
答えて
まず、このwikiページをお読みください:Creating a Custom SiteMapNodeVisibilityProvider。次に、あなたのサイトマップページを指す特定のノードのために、それをこのように宣言します(上記のリンクWikiページに示されている)IsVisible
メソッドを実装する際に今
<mvcSiteMapNode title="Site Map" controller="Home" action="Map" visibility="false" />
を、あなたはこれを行うことができます。
string visibility = mvcNode["visibility"];
// Is a visibility attribute specified?
if (!string.IsNullOrEmpty(visibility))
{
isVisible = Convert.ToBoolean(mvcNode["visibility"]);
if (!isVisible)
{
return false;
}
}
return true;
利用可能なノードとオプションを非表示にする方法を説明しています。あなたが追加した後
<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>
:あなたは上記のリンクから設定できるノードに
いくつかの設定を非表示にする方法については、このガイドを使用する必要があります
https://stackoverflow.com/a/27095721/853295
アプリの設定で、ブレッドクラムに表示したいメニューに次のコードを追加します。visibility="SiteMapPathHelper,!*"
(SiteMapPathHelper - ノードは、SiteMapPathはで表示されている* - それは他のすべてのコントロールのために目に見えないです!)
例:利用可能
<mvcSiteMapNode title="Administration" area="Admin" clickable="false" visibility="SiteMapPathHelper,!*" />
その他のオプション:
タイプ .......................... 影響内容
CanonicalHelper ....... Canonical HTML Helper
メニューヘルパー..............メニューHTMLヘルパー
メタロボットのヘルパー...メタロボットのHTMLヘルパー
SiteMapHelper .......... SiteMap HTMLヘルパー
SiteMapPathHelper ... SiteMapPathはHTMLヘルパー
SiteMapTitleHelper ...タイトルHTMLヘルパー
XmlSiteMapResultそれがないので.... /sitemap.xmlエンドポイント
のサイトマップのXML出力は、これは、最も簡単な解決策であります追加のコードは必要ありません。 –