以上是我的ASP.NET代码
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
<ul>
<asp:Repeater runat="server" ID="menuRepeater" DataSourceID="SiteMapDataSource1">
<ItemTemplate>
<li>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Url") %>' Text='<%# Eval("Title") %>' />
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
这是站点地图
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/Default.aspx" title="Homepage">
<siteMapNode url="~/Login.aspx" title="Login"/>
<siteMapNode url="~/News.aspx" title="News"/>
<siteMapNode url="~/Preferences.aspx" title="Preferences"/>
</siteMapNode>
</siteMap>
上面代码的问题是它只显示父节点(〜/ Default.aspx),但是当我使用Menu或TreeView控件并指定SiteMapDataSource时,一切正常。你能否发现我错在哪里?
答案 0 :(得分:2)
在SiteMapDataSource标记中设置ShowStartingNode =“false”。
答案 1 :(得分:0)
Vijay的建议和评论链接最终也为我提供了答案。
摘要版本为嵌套转发器,以及ShowStartingNode = false设置。为了后人的缘故,来自以上链接的代码:
<asp:SiteMapDataSource ID="siteMapDataSource1" runat="server" ShowStartingNode="false" />
<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>