カスタム SiteMap プロバイダを作成するには、StaticSiteMapProvider クラスを継承し、要件を実装します。次の2つのメソッドをオーバーライドします。
次のコードは、単純なサイトマッププロバイダの作成方法を示します。
C# でコードを書く場合
C# |
コードのコピー
|
---|---|
public partial class C1CustomSiteMapProvider : StaticSiteMapProvider { private readonly object C1siteMapLock = new object(); private SiteMapNode C1SiteMapRoot; // BuildSiteMap() メソッドをオーバーライドします public override SiteMapNode BuildSiteMap() { // ロックを使用してスレッドセーフを提供します lock (C1siteMapLock) { if (C1SiteMapRoot != null) { return C1SiteMapRoot; } base.Clear(); CreateSiteMapRoot(); CreateSiteMapNodes(); return C1SiteMapRoot; } } // GetRootNodeCore() メソッドをオーバーライドします protected override SiteMapNode GetRootNodeCore() { return BuildSiteMap(); } private void CreateSiteMapRoot() { C1SiteMapRoot = new SiteMapNode(this, "C1RootNode", "~/Default.aspx", "C1RootNode"); AddNode(C1SiteMapRoot); } private void CreateSiteMapNodes() { SiteMapNode node = null; for (int num = 1; num <= 3; num++) { node = new SiteMapNode(this, string.Format("C1ChildNode{0}", num), string.Format("~/WebForm{0}.aspx", num), string.Format("C1ChildNode{0}", num)); AddNode(node, C1SiteMapRoot); } } } |
Visual Basic でコードを書く場合
VB |
コードのコピー
|
---|---|
Public Class C1CustomSiteMapProvider Inherits StaticSiteMapProvider Private ReadOnly C1siteMapLock As New Object() Private C1SiteMapRoot As SiteMapNode ' BuildSiteMap() メソッドをオーバーライドします Public Overrides Function BuildSiteMap() As SiteMapNode ' ロックを使用してスレッドセーフを提供します SyncLock C1siteMapLock If C1SiteMapRoot IsNot Nothing Then Return C1SiteMapRoot End If MyBase.Clear() CreateSiteMapRoot() CreateSiteMapNodes() Return C1SiteMapRoot End SyncLock End Function ' GetRootNodeCore() メソッドをオーバーライドします Protected Overrides Function GetRootNodeCore() As SiteMapNode Return BuildSiteMap() End Function Private Sub CreateSiteMapRoot() C1SiteMapRoot = New SiteMapNode(Me, "C1RootNode", "~/Default.aspx", "C1RootNode") AddNode(C1SiteMapRoot) End Sub Private Sub CreateSiteMapNodes() Dim node As SiteMapNode = Nothing For num As Integer = 1 To 3 node = New SiteMapNode(Me, String.Format("C1ChildNode{0}", num), String.Format("~/WebForm{0}.aspx", num), String.Format("C1ChildNode{0}", num)) AddNode(node, C1SiteMapRoot) Next End Sub End Class |
カスタム SiteMap プロバイダは、web.config ファイルに登録する必要があります。 <system.web></system.web>
タグ内に次のマークアップを追加します。
マークアップ |
コードのコピー
|
---|---|
<siteMap defaultProvider="C1CustomSiteMapProvider" enabled="true"> <providers> <clear/> <add name="C1CustomSiteMapProvider" type="WebApplication1.C1CustomSiteMapProvider"/> </providers> </siteMap> |