ASP.NET站点地图不使用asp:repeater显示子节点

时间:2011-01-13 11:10:53

标签: asp.net repeater sitemap

以上是我的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时,一切正常。你能否发现我错在哪里?

2 个答案:

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