2011-01-13 71 views
1

以上是我的ASP.NET代碼ASP.NET站點地圖不顯示子節點:中繼

<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />     
<ul> 
    <asp:Repeater runat="server" ID="menuRepeater" DataSourceID="SiteMapDataSource1"> 
     <ItemTemplate> 
      <li> 
       <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Url") %>' Text='<%# Eval("Title") %>' /> 
      </li> 
     </ItemTemplate> 
    </asp:Repeater> 
</ul> 

,這裏是網站地圖

<?xml version="1.0" encoding="utf-8" ?> 
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > 
    <siteMapNode url="~/Default.aspx" title="Homepage"> 
    <siteMapNode url="~/Login.aspx" title="Login"/> 
    <siteMapNode url="~/News.aspx" title="News"/> 
    <siteMapNode url="~/Preferences.aspx" title="Preferences"/> 
    </siteMapNode> 
</siteMap> 

上面代碼的問題是,它只顯示父節點(〜/ Default.aspx),但是當我使用Menu或TreeView控件並指定SiteMapDataSource時,一切正常。你能發現我錯在哪裏嗎?

回答

2

在SiteMapDataSource標記中設置ShowStartingNode =「false」。

+0

是的,這是工作,但你能告訴我什麼是問題?我希望顯示所有節點,包括本地節點 – Tux 2011-01-13 11:25:11

0

維傑的建議和評論鏈接最終也爲我提供了答案。

摘要版本是嵌套中繼器,以及ShowStartingNode = false設置。爲了後代的緣故,從上面的鏈接代碼:

<asp:SiteMapDataSource ID="siteMapDataSource1" runat="server" ShowStartingNode="false" /> 
<asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1"> 
    <ItemTemplate> 
     <li> 
      <asp:HyperLink runat="server" 
      NavigateUrl='<%# Eval("Url") %>'> 
      <%# Eval("Title") %></asp:HyperLink> 

      <asp:Repeater runat="server" 
       DataSource='<%# ((SiteMapNode) Container.DataItem).ChildNodes %>'> 
       <HeaderTemplate> 
        <ul> 
       </HeaderTemplate> 

       <ItemTemplate> 
        <li> 
         <asp:HyperLink runat="server" 
         NavigateUrl='<%# Eval("Url") %>'> 
         <%# Eval("Title") %></asp:HyperLink> 
        </li> 
       </ItemTemplate> 

       <FooterTemplate> 
        </ul> 
       </FooterTemplate> 
      </asp:Repeater> 
     </li> 
    </ItemTemplate> 
</asp:Repeater>