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

Kit*_*nde 11 .net vb.net

我对.NET和VB.NET都非常不熟悉,并且无法弄清楚如何做到这一点.说我有这样的代码:

<div class="breadcrumb">
    <asp:SiteMapPath ID="SiteMapPath1" runat="server"></asp:SiteMapPath>
</div>
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

如何将其转换为如下列表:

<ul>
  <li>Home</li>
  <li>Showcase</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

小智 2

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

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

 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
Run Code Online (Sandbox Code Playgroud)

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

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();
        }
Run Code Online (Sandbox Code Playgroud)

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

<h1>Site Map</h1>
    <%=SiteMap()%>
</div>
Run Code Online (Sandbox Code Playgroud)