我有这样的站点地图:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<siteMapNode title="Home" >
<siteMapNode title="Services" >
<siteMapNode title="Training" url="~/Training.aspx"/>
</siteMapNode>
</siteMapNode>
</siteMap>
现在我想在单独的部门中显示第二级的站点地图。
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false" />
<asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1">
<asp:HyperLink ID="menu_items" runat="server" NavigateUrl='<%# Eval("Url") %>'><%# Eval("Title") %></asp:HyperLink>
</asp:Repeater>
<div class="separator"></div>
//Here must child Node(s) displayed
//e.g. return <a href="~Training.aspx">Training</a>
答案 0 :(得分:1)
您需要在新的SiteMapDataSource中指定起始节点,即使我不确定,它是否是最佳方法。我相信最好一次读取代码隐藏中的所有节点,然后使用此源将实际页面填充到您想要的数据。 这样做的原因是我不喜欢混合逻辑(将一些数据源绑定到元素当然是逻辑部分)与演示文稿(html等)。是的,用数据源向aspx文件发送垃圾邮件很容易,但我不相信它是最好的方法。
答案 1 :(得分:1)
要显示基本报告,过滤报告和自定义格式化SiteMapNodes的子项,我们可以将另一个Repeater添加到初始Repeater的ItemTemplate中。第二个Repeater将绑定到SiteMapNode实例的ChildNodes属性,如下所示:
<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>
这两个中继器会产生以下标记(为简洁起见,已删除了某些标记):
<li>
<a href="/Code/BasicReporting/Default.aspx">Basic Reporting</a>
<ul>
<li>
<a href="/Code/BasicReporting/SimpleDisplay.aspx">Simple Display</a>
</li>
<li>
<a href="/Code/BasicReporting/DeclarativeParams.aspx">Declarative Parameters</a>
</li>
<li>
<a href="/Code/BasicReporting/ProgrammaticParams.aspx">Setting Parameter Values</a>
</li>
</ul>
</li>
<li>
<a href="/Code/Filtering/Default.aspx">Filtering Reports</a>
...
</li>
<li>
<a href="/Code/CustomFormatting/Default.aspx">Customized Formatting</a>
...
</li>