使用SiteMap创建三级ASP.NET菜单,我该怎么做?

时间:2010-02-10 15:34:27

标签: c# asp.net menu sitemap

我想创建一个三级菜单,今天我有一个递归功能,可以使用三个级别。但问题是我如何输出第三个杠杆?使用两个中继器,我已经设法通过ChildNodes属性获得前两个级别。但这只能给我第二级。如果想要第三级怎么办?示例代码如下。我如何获得第三级? :)

<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>

2 个答案:

答案 0 :(得分:1)

我会使用转发器的OnItemCreatedEvent来注册每个转发器的OnItemDataBound事件,然后相应地绑定数据。 asp:菜单控件不合适吗?为什么要转发?

答案 1 :(得分:1)

我会创建一个自定义服务器控件并递归地解析站点地图。这将使您可以更好地控制渲染,并允许您为站点地图节点指定其他自定义属性。