2011-02-18 39 views
0

我目前使用SiteMapPath来为我的ASP.net 3.5(vb.net)页面生成一个面包屑,它效果很好。使用SiteMapPath创建动态页面标题?

现在我想弄清楚如何能够使用相同的控件来建立一个动态页面标题(在标签中)。我想列出一个反向路径,但SiteMapPath控件包含链接和一堆样式跨度。有什么办法可以删除所有这些,只需使用分隔符得到一个简单的路径?

例如,假设我们在我网站“关于”部分的“新闻稿”页面上。

的痕迹显示为:

首页>>新闻稿

我想有页面标题是:

新闻稿 - 关于 - 公司名称

所以我需要它来反转订单,删除所有跨度,链接和样式(因为它位于标签内)并放下根节点“Home”,然后将公司名称添加到最后。由于我的菜单nav和breadrumbs都是从站点地图文件驱动的,所以我认为尝试使标题保持不变是有道理的。

有什么想法?谢谢。

+0

难道我的回答帮助解决问题了吗? – PhillFox 2011-02-25 15:46:57

回答

1

实现所需输出的最佳方法是忽略SitePath控件,而是使用SiteMap的SiteMapNode集合。服务器将web.sitemap解析为SiteMapNodes的集合,并通过查找与当前页面的URL匹配的节点来连接SiteMap.CurrentNode。每个SiteMapNode都有一个ParentNode属性。 Here is the reference page on MSDN

所以,你需要做的是检查CurrentNode有父,如果它您添加ParentNode的标题为CurrentNode的标题,并保持下去,直到你到达根节点(你的根替换为您的公司名称节点的标题)。

下面是一个快速解决方案;如果你使用的话,它可以进入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; 
} 

希望帮助...