我对.NET和VB.NET都非常不熟悉,也不知道该怎么做。假设我有这样的代码:
<div class="breadcrumb">
<asp:SiteMapPath ID="SiteMapPath1" runat="server"></asp:SiteMapPath>
</div>它输出一堆以>作为分隔符的<span>,如下所示:
<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&t=634245478914809245" style="border-width:0px;" />
</a>
<span>
<a href="/Bonfield/Default.aspx">Home</a>
</span>
<span> » </span>
<span>Showcase</span><a id="ctl00_SiteMapPath1_SkipLink"></a></span>
</div>我如何才能将其转换为如下列表:
<ul>
<li>Home</li>
<li>Showcase</li>
</ul>发布于 2012-02-09 00:06:45
您现在可能已经解决了这个问题,但是您可以使用此函数遍历站点地图的根节点中的所有项目及其后代,并构建一个嵌套列表。
如果您只对顶级感兴趣,则可以删除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>发布于 2012-12-30 11:40:53
虽然你不能摆脱span标签,但你可以完成你想要的。我遇到了同样的问题,因为我使用的是客户想要的CSS/HTML站点模板,但整个模板都是基于<ul>和<li>的,重构CSS太痛苦了,所以我发现这个解决方案在不修改CSS代码的情况下工作得很好。
您将做两件事:
<li>标记的模板覆盖默认节点模板<ul> tag中
下面是一个例子:
<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>发布于 2011-09-29 14:15:00
我能想到的最接近的方法就是把你的网站地图放到一个<asp:menu>控件中。但是,这将输出为一个html表,但在视觉上它将显示一个列表:
<asp:Menu ID="leftNavigation" runat="server" DataSourceID="SiteMapDataSource1"
StaticDisplayLevels="1" MaximumDynamicDisplayLevels="1">
</asp:Menu>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false" />尝试所有样式和格式选项,以获得所需的输出。See here获取详细的演练。
当然,你也可以考虑使用带有站点地图的树形视图(参见同一页)。
https://stackoverflow.com/questions/7592970
复制相似问题