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

Posted

技术标签:

【中文标题】使用 SiteMap 创建一个三级 ASP.NET 菜单,我该怎么做?【英文标题】:Creating a three level ASP.NET menu with SiteMap, how do i do it? 【发布时间】:2010-02-10 15:34:27 【问题描述】:

我想创建一个三层菜单,我今天有一个递归函数,它适用于三层。但问题是我如何输出第三个杠杆?使用两个中继器,我设法通过 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>

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

这已经完成了,我有一个继承自 StaticSiteMapProvider 并递归构建站点地图的 SiteMapProvider 类。但问题是我如何用三个级别渲染它?菜单控件不会创建糟糕的表格等吗?我认为这就是它第一次被丢弃的原因:) 我建议创建自定义服务器控件,而不是站点地图提供程序。对于简单的站点地图,ASP.NET 菜单控件可以正常工作。使用 CSS Friendly Adapters 将菜单呈现为列表,cssfriendly.codeplex.com。

以上是关于使用 SiteMap 创建一个三级 ASP.NET 菜单,我该怎么做?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在没有 web.sitemap 的情况下进行基于 ASP.NET 角色的表单身份验证和授权?

ASP.NET MVC SiteMap 提供程序——如何在实际菜单中“隐藏”单个项目

siteMap与站点导航

asp.net mvc中使用jquery H5省市县三级地区选择控件

如何在 ASP.net 页面中设置面包屑导航

asp.net怎么做无刷新省市三级联动,用数据库做的,求大神帮忙解决,发个源码也可以,谢谢啦