4

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

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

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

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

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

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

非常感谢!

4

2 回答 2

3

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

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

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

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

于 2011-11-28T16:53:52.170 回答
0

“我们现在收到的错误消息告诉我们,您不允许在 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>
于 2011-11-28T17:57:21.053 回答