ページにリンクのある 3 つの領域があるとします。
- ヘッダ
- メニュー
- フッター
それぞれに異なるリンクがありますが、一部のリンクは重複しています:
これを実現するために MVCSiteMapProvider を使用しています。私はサイトマップを持っています:
<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0"
xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0 MvcSiteMapSchema.xsd"
enableLocalization="false">
<mvcSiteMapNode title="Home" controller="Home" action="Index">
<mvcSiteMapNode title="Link 1" controller="" action="" visibility="Header, Footer" />
<mvcSiteMapNode title="Link 2" controller="" action="" visibility="Menu" />
<mvcSiteMapNode title="Link 3" controller="" action="" visibility="Header, Menu" />
<mvcSiteMapNode title="Link 4" controller="" action="" visibility="Menu, Footer, Header" />
</mvcSiteMapNode>
</mvcSiteMap>
Visibility がこれを行う方法だと思ったのですが、思い通りに動作しません。
Public Class MenuVisibilityProvider
Implements ISiteMapNodeVisibilityProvider
Public Function IsVisible(ByVal node As SiteMapNode, ByVal context As HttpContext, ByVal sourceMetadata As IDictionary(Of String, Object)) As Boolean Implements ISiteMapNodeVisibilityProvider.IsVisible
Dim visibility As String = node("visibility")
If visibility IsNot Nothing Then Return True
Select Case visibility
Case "Menu"
Case "Header"
Case "Footer"
Return True
End Select
Return False
End Function
End Class
最終的に、すべての領域のすべてのリンクになります。
明確にするために編集:
これは同様の質問ですが、回答もありません: https://stackoverflow.com/questions/12845929/how-to-show-partial-site-map-include-current-node-with-mvcsitemapprovider
これも似ていますが、複数の SiteMap を作成する必要はありません: Using Multiple MvcSiteMaps