SiteMap for ASP.NET Web Forms
カスタム SiteMap プロバイダ
主な機能 > データ連結 > カスタム SiteMap プロバイダ

カスタム SiteMap プロバイダを作成するには、StaticSiteMapProvider クラスを継承し、要件を実装します。次の2つのメソッドをオーバーライドします。

SiteMap プロバイダの作成

次のコードは、単純なサイトマッププロバイダの作成方法を示します。

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 プロバイダの配布

カスタム SiteMap プロバイダは、web.config ファイルに登録する必要があります。 <system.web></system.web> タグ内に次のマークアップを追加します。

マークアップ
コードのコピー
     <siteMap defaultProvider="C1CustomSiteMapProvider" enabled="true">
      <providers>
        <clear/>
        <add name="C1CustomSiteMapProvider" type="WebApplication1.C1CustomSiteMapProvider"/>
      </providers>
    </siteMap>