ComponentOne SiteMap for ASP.NET Web Forms
C1SiteMap Features / Data Binding / Custom SiteMap Provider
In This Topic
    Custom SiteMap Provider
    In This Topic

    To create a custom SiteMap provider, inherit from the StaticSiteMapProvider class and then implement the requirements. Override the two methods:

    Create a SiteMap Provider

    The following code shows how to create a simple site map provider:

    To write code in C#

    public partial class C1CustomSiteMapProvider : StaticSiteMapProvider
    {
            private readonly object C1siteMapLock = new object();
            private SiteMapNode C1SiteMapRoot;
       
            // Override BuildSiteMap() method
            public override SiteMapNode BuildSiteMap()
            {
                // Use a lock to provide thread safety
                lock (C1siteMapLock)
                {
                    if (C1SiteMapRoot != null)
                    {
                        return C1SiteMapRoot;
                    }
                     base.Clear();
                     CreateSiteMapRoot();
                     CreateSiteMapNodes();
                     return C1SiteMapRoot;
                }
            }
            
            // Override GetRootNodeCore() method
            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("~/Web Form{0}.aspx", num),
                        string.Format("C1ChildNode{0}", num));
                     AddNode(node, C1SiteMapRoot);
                }
            }       
    }
    

    To write code in Visual Basic

    Public Class C1CustomSiteMapProvider
       
            Inherits StaticSiteMapProvider
            Private ReadOnly C1siteMapLock As New Object()
            Private C1SiteMapRoot As SiteMapNode
    
            ' Override BuildSiteMap() method
            Public Overrides Function BuildSiteMap() As SiteMapNode
                ' Use a lock to provide thread safety
                SyncLock C1siteMapLock
                    If C1SiteMapRoot IsNot Nothing Then
                        Return C1SiteMapRoot
                    End If
                    MyBase.Clear()
                    CreateSiteMapRoot()
                    CreateSiteMapNodes()
                    Return C1SiteMapRoot
                End SyncLock
            End Function
    
            ' Override GetRootNodeCore() method
            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("~/Web Form{0}.aspx", num), String.Format("C1ChildNode{0}", num))
                    AddNode(node, C1SiteMapRoot)
                Next
            End Sub
        End Class
    

    Deploy the SiteMap Provider

    The custom SiteMap Provider has to be registered in the web.config file. Add the following markup within the <system.web></system.web> tags:

    Markup
    Copy Code
    <siteMap defaultProvider="C1CustomSiteMapProvider" enabled="true">
          <providers>
            <clear/>
            <add name="C1CustomSiteMapProvider" type="WebApplication1.C1CustomSiteMapProvider"/>
          </providers>
        </siteMap>