There are several ways to do this.
Place PlaceHolder on the page:
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
Now create a TreeView and assign the SiteMapDataSource, which is already on the page:
TreeView tv1 = new TreeView();
tv1.DataSourceID = "SiteMapDataSource1";
PlaceHolder1.Controls.Add(tv1);
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
Or you can programmatically assign SiteMap:
XmlSiteMapProvider testXmlProvider = new XmlSiteMapProvider();
NameValueCollection providerAttributes = new NameValueCollection(1);
providerAttributes.Add("siteMapFile", "Web2.sitemap");
testXmlProvider.Initialize("testProvider", providerAttributes);
testXmlProvider.BuildSiteMap();
SiteMapDataSource smd = new SiteMapDataSource();
smd.Provider = testXmlProvider;
TreeView tv2 = new TreeView();
tv2.DataSource = smd;
tv2.DataBind();
PlaceHolder1.Controls.Add(tv2);
Configuring SiteMap programmatically also allows you to switch files based on business rules.
This can also be done via Web.Config:
<configuration>
<system.web>
<siteMap>
<providers>
<add name="SiteMap1" type="System.Web.XmlSiteMapProvider" siteMapFile="~/Web.sitemap" />
<add name="SiteMap2" type="System.Web.XmlSiteMapProvider" siteMapFile="~/Web2.sitemap" />
</providers>
</siteMap>
</system.web>
</configuration>
and then on your aspx page just switch the provider:
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" SiteMapProvider="SiteMap2" />
Hope this helps
source
share