我目前使用SiteMapPath为我的ASP.net 3.5(vb.net)页面生成面包屑,效果很好。
现在我想弄清楚我如何能够使用相同的控件来构建动态页面标题(在标签中)。我希望列出一个反向路径,但SiteMapPath控件包含链接和一组样式跨度。有没有办法删除所有这些,只是得到一个带分隔符的普通路径?
例如,假设我们在我网站“关于”部分的“新闻发布”页面上。
面包屑显示为:
主页>关于>新闻稿
我希望页面标题为:
新闻稿 - 关于 - 公司名称
所以我需要它颠倒顺序,删除所有的跨度,链接和造型(因为这是在标签内)和下降根节点“家”,然后添加公司名称到最后。由于我的菜单导航和面包都来自站点地图文件,我认为尝试使标题做同样的事情是有意义的。
有什么想法?感谢。
答案 0 :(得分:1)
实现所需输出的最佳方法是忽略SitePath控件,而是使用SiteMap的SiteMapNode集合。服务器将web.sitemap解析为SiteMapNodes的集合,并通过查找与当前页面的URL匹配的节点来连接SiteMap.CurrentNode。每个SiteMapNode都有一个ParentNode属性。 Here is the reference page on MSDN
因此,您需要做的就是检查CurrentNode是否有父节点,如果是,您将ParentNode的标题添加到CurrentNode的标题并继续,直到您到达RootNode(您将公司名称替换为根节点的位置)标题)。
以下是一个快速解决方案;如果你使用的话,它可以进入MasterPage。我不确定你的语言,但这应该很容易在VB.Net中重写。我给了它一个简单的测试,它似乎工作。 您可以自定义分隔页面标题的字符。
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = SiteMapTitle(SiteMap.CurrentNode, "", " - ");
}
private string GetNodeTitle(SiteMapNode oNode)
{
if (oNode == SiteMap.RootNode)
return "Company Name";
else
return oNode.Title;
}
private string SiteMapTitle(SiteMapNode oNode, string szTitle, string szItemSeparator)
{
if (szTitle != string.Empty)
szTitle = szTitle + szItemSeparator + GetNodeTitle(oNode);
else
szTitle = GetNodeTitle(oNode);
if (oNode.ParentNode != null)
szTitle = SiteMapTitle(oNode.ParentNode, szTitle, szItemSeparator);
return szTitle;
}
希望有帮助...