【问题标题】:ASP.NET sitemap not displaying child nodes using asp:repeaterASP.NET 站点地图不使用 asp:repeater 显示子节点
【发布时间】:2011-01-13 11:10:53
【问题描述】:

以上是我的 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 时,一切正常。你能找出我哪里错了吗?

【问题讨论】:

    标签: asp.net repeater sitemap


    【解决方案1】:

    在 SiteMapDataSource 标记中设置 ShowStartingNode="false"。

    【讨论】:

    • 是的,这是可行的,但你能告诉我问题出在哪里吗?我希望显示所有节点,包括主节点
    • SiteMapDataSource 控件一次返回一级站点地图层次结构,从站点地图根节点开始。通过设置 ShowStartingNode=false 它绕过 Root 节点并从 Home 开始。我建议你阅读asp.net/data-access/tutorials/…
    【解决方案2】:

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多