2010-02-10 48 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