2011-11-27 45 views
4

在我正在嘗試移動到Composite中的ASP.Net項目中,我遇到了處理非物理頁面的問題。處理Composite C1中生成的頁面

爲了簡單起見,我們假設我有一個網上商店,數據庫中的每個類別都有自己的網址。 (例如:/ myshop/clothes)

在ASP.NET項目中,類似這樣的url將被路由到頁面Category.aspx,該頁面處理請求並從數據庫讀取類別內容。

複合材料似乎更專注於「真實」的網頁,那麼最好的方法來實現這樣的事情是什麼? (特別是路由)

並且:有沒有辦法讓這些生成的頁面與像Navigation.Path這樣的模塊一起工作?

回答

5

對於需要自己處理的菜單生成和麪包屑,最終使用SiteMapProvider上的SiteMap.Resolve事件來動態地掛鉤「不存在」頁面。

關於路由,在C1中有一項功能,它將url解析爲第一個「真實頁面」,並將您可以使用的url的多餘部分提交給您。假設/ myshop是你的商店頁面,並且用戶請求了/ myshop/clothes,那麼它仍然會被執行,並且你會把代碼放在那裏來處理你的類別。

在你的「myshop」頁面上提取「衣服」的代碼將是Composite.Core.Routing.Pages.C1PageRoute.GetPathInfo(),並且指示C1不要發出404錯誤,你可以撥打Composite.Core.Routing.Pages.C1PageRoute.RegisterPathInfoUsage()讓C1知道「衣服」是一個有效的類別。

閱讀更多關於API的信息here

如果您需要處理選擇類別時的不同情況,以及用戶剛剛直接點擊/ myshop的情況,您可以將MyShop頁面設置爲使用特定模板,然後在那裏將<rendering:contentplaceholder>元素一個具有某種別的邏輯的函數。如果未選擇類別,則打印出<rendering:contentplaceholder>的內容,否則根據類別進行一些查找,然後打印出其他一些內容。

+0

如果/ myshop頁面上有內容會怎麼樣?我如何最好地隱藏「標準」內容?我可以把它放在一個控件中,但後來我無法通過Composite後端編輯它。 – magnattic

+1

讓你的商店頁面使用一個特定的模板,將頁面內容封裝在if-else函數中,所以如果沒有設置類別,只需打印普通內容,如果設置了類別,就可以使用它。 –

相關問題