2010-02-10 47 views
1

我想創建一個三級菜單,我現在有一個遞歸函數,可以在三個級別上使用。但問題是我如何輸出第三杆?使用兩個中繼器,我設法通過ChildNodes屬性獲得前兩個級別。但那隻能給我第二個層次。如果想要第三級呢?下面的示例代碼。我如何獲得第三級? :)用SiteMap創建三級ASP.NET菜單,我該怎麼做?

<asp:Repeater ID="FirstLevel" DataSourceID="SiteMapDataSource" runat="server" EnableViewState="false"> 
       <ItemTemplate> 
        <li class="top"> 
         <a href='/About/<%#Eval("Title")%>.aspx' class="top_link"><span class="down"><%#Eval("Title")%></span><!--[if gte IE 7]><!--></a><!--<![endif]--> 
         <asp:Repeater runat="server" ID="SecondLevel" DataSource='<%#((SiteMapNode)Container.DataItem).ChildNodes%>'> 
          <HeaderTemplate><!--[if lte IE 6]><table><tr><td><![endif]--><ul class="sub"></HeaderTemplate> 
          <ItemTemplate> 
           <li> 
            <a href='<%#((string)Eval("Url")).Replace("~", "")%>' style="text-align: left;"><%#Eval("Title")%></a> 

            Third repeater here? 

           </li> 
          </ItemTemplate> 
          <FooterTemplate></ul><!--[if lte IE 6]></td></tr></table></a><![endif]--></FooterTemplate> 
         </asp:Repeater> 
        </li> 
       </ItemTemplate> 
      </asp:Repeater> 

回答

1

我會使用OnItemCreatedEvent中繼器註冊的每個中繼器的OnItemDataBound事件,然後相應地結合的數據。 asp:菜單控件不適用?爲什麼中繼器?

1

我會創建一個自定義的服務器控件並遞歸解析站點地圖。這將使您更好地控制渲染,並允許您爲站點地圖節點指定其他自定義屬性。

+0

這已經完成了,我有一個SiteMapProvider類繼承自StaticSiteMapProvider並遞歸地構建站點地圖。但問題是我如何渲染它三個級別? Menu控件是否創建了糟糕的表格等?我認爲這就是爲什麼它第一次被傾倒的原因:) – jinxen 2010-02-11 07:02:00

+0

我建議創建一個自定義的服務器控件,而不是一個站點地圖提供程序。對於簡單的站點地圖,ASP.NET菜單控件將正常工作。使用CSS Friendly Adapters將菜單呈現爲列表,http://cssfriendly.codeplex.com。 – 2010-02-11 17:07:13