首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将asp:SiteMapPath的输出转换为列表?

如何将asp:SiteMapPath的输出转换为列表?
EN

Stack Overflow用户
提问于 2011-09-29 13:47:39
回答 5查看 3.9K关注 0票数 11

我对.NET和VB.NET都非常不熟悉,也不知道该怎么做。假设我有这样的代码:

代码语言:javascript
复制
<div class="breadcrumb">
    <asp:SiteMapPath ID="SiteMapPath1" runat="server"></asp:SiteMapPath>
</div>

它输出一堆以>作为分隔符的<span>,如下所示:

代码语言:javascript
复制
<div class="breadcrumb">
  <span id="ctl00_SiteMapPath1">
    <a href="#ctl00_SiteMapPath1_SkipLink">
      <img alt="Skip Navigation Links" height="0" width="0" src="/Bonfield/WebResource.axd?d=PEpmmIw6qvhaEC3hEwXGjgvJKlzc3DOMu_e-zW-n6pfl6YR-iYjwmlvrYPb689EslKxysA7aoh_x_ALjLs5QXiz7NG41&amp;t=634245478914809245" style="border-width:0px;" />
    </a>
    <span>
      <a href="/Bonfield/Default.aspx">Home</a>
    </span>
    <span> &#187; </span>
    <span>Showcase</span><a id="ctl00_SiteMapPath1_SkipLink"></a></span>
</div>

我如何才能将其转换为如下列表:

代码语言:javascript
复制
<ul>
  <li>Home</li>
  <li>Showcase</li>
</ul>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-09 00:06:45

您现在可能已经解决了这个问题,但是您可以使用此函数遍历站点地图的根节点中的所有项目及其后代,并构建一个嵌套列表。

如果您只对顶级感兴趣,则可以删除If item.HasChildNodes Then sb.Append(ListChildNodes(item))

代码语言:javascript
复制
 Public Function SiteMap() As String
        Return ListChildNodes(System.Web.SiteMap.RootNode)
    End Function

    Private Function ListChildNodes(ByVal node As System.Web.SiteMapNode) As String
        Dim sb As New System.Text.StringBuilder

        sb.Append("<ul>")
        For Each item As SiteMapNode In node.ChildNodes
            sb.Append(String.Concat("<li><a href=""", item.Url, """>", item.Title, "</a></li>"))
            If item.HasChildNodes Then sb.Append(ListChildNodes(item))
        Next
        sb.Append("</ul>")

        Return sb.ToString
    End Function

对于那些想要C#版本的人:

代码语言:javascript
复制
public string SiteMap()
        {
            return ListChildNodes(System.Web.SiteMap.RootNode);
        }
        private string ListChildNodes(System.Web.SiteMapNode node)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();

            sb.Append("<ul>");
            foreach (SiteMapNode item in node.ChildNodes)
            {
                sb.Append(string.Concat("<li><a href=\"", item.Url, "\">", item.Title, "</a></li>"));
                if (item.HasChildNodes)
                    sb.Append(ListChildNodes(item));
            }
            sb.Append("</ul>");

            return sb.ToString();
        }

然后,在您的代码中,只需调用将字符串输出到页面即可。

代码语言:javascript
复制
<h1>Site Map</h1>
    <%=SiteMap()%>
</div>
票数 2
EN

Stack Overflow用户

发布于 2012-12-30 11:40:53

虽然你不能摆脱span标签,但你可以完成你想要的。我遇到了同样的问题,因为我使用的是客户想要的CSS/HTML站点模板,但整个模板都是基于<ul><li>的,重构CSS太痛苦了,所以我发现这个解决方案在不修改CSS代码的情况下工作得很好。

您将做两件事:

  1. 使用使用<li>标记的模板覆盖默认节点模板
  2. 将整个内容包装在<ul> tag

下面是一个例子:

代码语言:javascript
复制
<ul style="list-style-type: none;">
  <asp:SiteMapPath ID="SiteMapPath1" runat="server" >
    <NodeTemplate>
      <li>
        <a href='<%# Eval("url") %>' title='<%# Eval("description") %>'><%# Eval("title") %></a>
      </li>
    </NodeTemplate>
  </asp:SiteMapPath>
</ul>
票数 2
EN

Stack Overflow用户

发布于 2011-09-29 14:15:00

我能想到的最接近的方法就是把你的网站地图放到一个<asp:menu>控件中。但是,这将输出为一个html表,但在视觉上它将显示一个列表:

代码语言:javascript
复制
<asp:Menu ID="leftNavigation" runat="server" DataSourceID="SiteMapDataSource1" 
       StaticDisplayLevels="1" MaximumDynamicDisplayLevels="1">
</asp:Menu>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false" />

尝试所有样式和格式选项,以获得所需的输出。See here获取详细的演练。

当然,你也可以考虑使用带有站点地图的树形视图(参见同一页)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7592970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档