使用 SiteMapPath 创建动态页面标题?

Posted

技术标签:

【中文标题】使用 SiteMapPath 创建动态页面标题?【英文标题】:Using SiteMapPath to create a dynamic page title? 【发布时间】:2011-02-18 17:55:38 【问题描述】:

我目前使用 SiteMapPath 为我的 ASP.net 3.5 (vb.net) 页面生成面包屑,效果很好。

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

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

面包屑显示为:

首页 > 关于 > 新闻稿

我希望页面标题为:

新闻稿 - 关于 - 公司名称

所以我需要它来颠倒顺序,删除所有跨度、链接和样式(因为这是在标签内)并删除根节点“Home”,然后将公司名称添加到末尾。由于我的菜单导航和面包屑都是从站点地图文件驱动的,我认为尝试使标题也这样做是有意义的。

有什么想法吗?谢谢。

【问题讨论】:

我的回答对您的问题有帮助吗? 【参考方案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;

希望对您有所帮助...

【讨论】:

以上是关于使用 SiteMapPath 创建动态页面标题?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Sitemappath 控件在网站的母版页中添加面包屑?

动静态web项目

怎么让 echarts 图表动起来?定时器解决它 —— 大屏展示案例(动态仪表盘动态柱状图)

11.21

1121课堂小结

javascript基础01