您现在可能已经解决了这个问题,但是您可以使用此函数循环遍历站点地图的根节点及其后代中的所有项目,并构建一个嵌套列表。
您可以删除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
对于那些想要 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();
}
然后在您的代码中,您只需调用即可将字符串输出到页面。
<h1>Site Map</h1>
<%=SiteMap()%>
</div>