2009-08-02 10 views

Odpowiedz

11

Istnieje kilka sposobów, aby to zrobić.

Umieść symbol zastępczy na stronie:

<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 

Teraz utworzyć TreeView i przypisać SiteMapDataSource że jest już na stronie:

//Code Behind 
    TreeView tv1 = new TreeView(); 
    tv1.DataSourceID = "SiteMapDataSource1"; 
    PlaceHolder1.Controls.Add(tv1); 

    //aspx 
    <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" /> 

Albo można przypisać SiteMap programowo:

// Create an instance of the XmlSiteMapProvider class. 
    XmlSiteMapProvider testXmlProvider = new XmlSiteMapProvider(); 
    NameValueCollection providerAttributes = new NameValueCollection(1); 
    providerAttributes.Add("siteMapFile", "Web2.sitemap"); 

    // Initialize the provider with a provider name and file name. 
    testXmlProvider.Initialize("testProvider", providerAttributes); 

    // Call the BuildSiteMap to load the site map information into memory. 
    testXmlProvider.BuildSiteMap(); 

    SiteMapDataSource smd = new SiteMapDataSource(); 
    smd.Provider = testXmlProvider; 

    TreeView tv2 = new TreeView(); 
    tv2.DataSource = smd; 
    tv2.DataBind(); //Important or all is blank 
    PlaceHolder1.Controls.Add(tv2); 

Ustawienie SiteMap programowo pozwala również na przełączanie plików na podstawie w sprawie reguł biznesowych.

Można to również zrobić za pomocą pliku web.config:

<configuration> 
    <!-- other configuration sections --> 
    <system.web> 
    <!-- other configuration sections --> 
    <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> 

a potem w swojej stronie aspx wystarczy przełączyć provider:

<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" SiteMapProvider="SiteMap2" /> 

Nadzieja to pomaga

+0

Niestety, nadal masz aby zapisać mapę witryny do pliku. – tsilb

+0

Tak, domyślnie musi być plik mapy witryny. Możesz jednak zaimplementować własny SiteMapProvider, który może zwrócić dynamicznie generowaną mapę witryny: http://msdn.microsoft.com/en-us/library/aa479033.aspx - http://msdn.microsoft.com/en-us/library /aa479320.aspx. Jeśli masz Google "custom sitemapprovider", jest na nim mnóstwo postów. –