2011-11-28 112 views
4

我试图在使用SiteMapPath控件的Visual Studio ASP C#网站上实现breadcrumb功能。为ASP.NET网站创建web.sitemap文件

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

最初,当我从工具箱中放入SiteMapPath时,我收到一条错误消息,说没有找到web.sitemap文件。然后我使用一个应用程序创建了一个应用程序,该应用程序可以完成ASP网站的工作

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

一些研究告诉我要在xml中为每个URL添加一个唯一的虚拟无用请求字符串。这看起来也有点儿荒谬,而且完全破解 - 尤其是一个包含可能重复的数百个网址的网站。

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

非常感谢!

回答

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> 
+0

感谢您的反馈,非常有帮助。但是,对于这样一个大型网站,我不确定是否可以手动完成这一切。写这样的脚本来解析它可能是可能的,但也是时间消耗。 –

3

基本上,默认的站点地图提供者(System.Web.XmlSiteMapProvider)要求所有的URL是唯一的,所以它可以很容易地解决当前选定的节点,与物业SiteMap.CurrentNode

这有点令人沮丧,这会导致人们对假冒的查询字符串进行纠正,就像您已经注意到的那样。对于只有少数几个人的简单情况,这通常是可以接受的。

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

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