【问题标题】:Creating a web.sitemap file for a ASP.NET website为 ASP.NET 网站创建 web.sitemap 文件
【发布时间】:2011-11-28 16:44:52
【问题描述】:

我正在尝试使用 SiteMapPath 控件在 Visual Studio ASP C# 站点上实现面包屑导航功能。

我工作的公司继承了该网站,我们主要是 PHP 开发人员,请原谅我的无知。

最初,当我从工具箱中放入 SiteMapPath 时,我收到一条错误消息,提示找不到 web.sitemap 文件。然后我使用一个应用程序创建了一个,该应用程序应该为 ASP 站点完成这项工作。

我们现在收到的错误消息告诉我们,您不允许在 xml 结构中使用相同的 URL 两次。这似乎很荒谬,因为许多页面都有相同的链接。

一些研究告诉我在 xml 中为每个 URL 附加一个唯一的虚拟无用请求字符串。这似乎也有点荒谬,而且完全是黑客攻击——尤其是在一个包含可能重复数百个 URL 的站点的情况下。

任何人都可以对此有所了解,或者甚至可以采用完全不同的方法吗?

非常感谢!

【问题讨论】:

    标签: c# asp.net visual-studio-2010 web.sitemap


    【解决方案1】:

    基本上,默认站点地图提供程序 (System.Web.XmlSiteMapProvider) 要求所有 URL 都是唯一的,因此它可以轻松解析当前选定的节点,并使用属性 SiteMap.CurrentNode

    这有点令人沮丧,这会导致人们使用您提到的虚假查询字符串。对于只有几次重复的简单情况,这通常是可以接受的。

    但是,您可以实现自己的站点地图提供程序,请参阅 MSDN 上的 Implementing ASP.NET Site-Map Providers。通过这样做,您可以拥有自己的逻辑来处理您的站点地图文件,并获得您想要的行为。

    在这种情况下,自定义站点地图提供程序可能是最简洁的方法。

    【讨论】:

      【解决方案2】:

      “我们现在收到的错误消息告诉我们,您不允许在 xml 结构中使用相同的 URL 两次。这看起来很荒谬,因为许多页面都有相同的链接。”

      我认为有些混乱:具有相同链接的页面是无关紧要的 - web.sitemap 只是页面位置的 XML 地图。该文件不记录页面交叉链接。但是,如果它们具有相同的名称,您可以嵌套它们:

      <?xml version="1.0" encoding="utf-8" ?>
      <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
          <siteMapNode url="/" title="Home">
              <siteMapNode url="/subdir" title="Subdir">
                  <siteMapNode url="/subdir/page.aspx" title="Nested Page" />
              </sitemapNode>
              <siteMapNode url="/page.aspx" title="Root Page" />
          </siteMapNode>
      </siteMap>
      

      【讨论】:

      • 感谢您的反馈,非常有帮助。但是,对于这么大的网站,我不确定手动手动完成这一切是否可行。编写某种脚本以这种方式解析它可能是可能的,但也很耗时。
      猜你喜欢
      • 2013-02-23
      • 2012-10-08
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多