2011-11-28 93 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。通過這樣做,你可以擁有自己的邏輯來處理你的站點地圖文件,並獲得你想要的行爲。

在這種情況下,自定義站點地圖提供程序可能是最乾淨的方法。