2010-04-20 38 views
1

我從Intelligencia的UrlRewriter切換到ASP.NET 4.0中新的Web表單路由。但是,在我的電子商務網站中,當瀏覽類別頁面時,我以前使用內置於我的尋呼機控件中的查詢字符串來控制分頁,現在我不確定如何使用路由來處理此問題。當我使用ASP.NET 4 URL路由時,我還應該爲頁碼等使用查詢字符串嗎?

我定義了一個的MapPageRoute爲:

routes.MapPageRoute("cat-browse", "Category/{name}_{id}", ~/CategoryPage.aspx"); 

這個偉大的工程。現在,有人點擊進入第2頁。以前,我會在網址上添加?page = 2。如何使用Web表單路由處理此問題?我知道我可以這樣做:

http://www.mysite.com/Category/Arts-and-Crafts_17/page/2 

但除了頁面,我可以有過濾器,年齡範圍,性別等

  1. 我應該不斷界定處理這些變量路線 如上面的 ?
  2. 我應該繼續使用querystrings ,如果是的話,你如何定義路線 來處理?

回答

4

的主要原因使用URL路由,露出乾淨,用戶和搜索引擎友好,網址。如果這是你的目標,那麼嘗試堅持下去,不要使用查詢字符串參數。注意:我不相信我們需要完全禁止查詢字符串的使用,並且根據您的情況,您可能會決定使用查詢字符串參數來處理不經常使用的參數,或者在沒有實際值的情況下使用查詢字符串參數信息在語義上更有意義。

因此,這裏是我會做什麼:

定義一個包羅了所有的所有其他參數:

routes.MapPageRoute("cat-browse", "Category/{name}_{id}/{*queryvalues}", "~/CategoryPage.aspx"); 

在/CategoryPage.aspx,訪問路由器的參數,然後解析爲相應:

Page.RouteData.Values["queryvalues"] 

而不是使用的Arts-and-Crafts_17/**page/2/age/34**語法,這些參數的,我perfer使用的語法如下:Arts-and-Crafts_17/pg-2/age-34/

如果你這樣做,catch-all參數'querystring'將等於pg-2/age-34。您現在可以輕鬆解析這些數據並將每個名稱/值添加到頁面上下文中。請注意,您需要沿着這些線做些事情,因爲這些參數中的每一個在您的網站上都是可選的。

-1

您可以利用C#4.0命名參數和可選參數。請從這個example看看這個

如果你使用的是較低版本的框架,你也可以使用上面鏈接的代碼。但是,而不是宣佈方法

public ActionResult Search(int? page=0) 
{} 

,你可以聲明爲

public ActionResult Search(int? page) 
{ 
    if(page == null) 
    { 
    page=0; 
    } 
} 

HTH

+0

傑克,我沒有使用MVC,我正在使用webforms – ScottG 2010-04-27 20:32:18

相關問題