2010-09-23 51 views
12

我想在我的路由表中添加可選參數。 比如我想在用戶瀏覽產品目錄是這樣的: http://www.domain.com/browse/by-category/electronics/1,2,3asp.net webforms routing:可選參數

現在我已經創造了這樣的路線:

然而
  routes.MapPageRoute(
      "ProductsBrowse", 
      "browse/{BrowseBy}/{Category}", 
      "~/Pages/Products/Browse.aspx" 
     ); 

問題是,當用戶輸入http://www.domain.com/browse,我希望他們提出一個不同的頁面,他們可以選擇如何瀏覽的方式。所以參數{BrowseBy}和{Category}不會被使用。

有沒有解決方法,然後爲每個場景創建單獨的路線?

謝謝你的時間! 親切的問候, 馬克

+0

請參閱我的回答它展示瞭如何用一個路由做到這一點。 – 2011-08-20 18:15:27

回答

3

我只是創建單獨的路線。

也就是說,你可以定義一個基於你定義的約定的自定義RouteHandler,自動發送這些特殊情況,就好像你有不同的路線。

或者,您可以使用自定義RouteHandler以及一個約定,以避免必須指定路徑中的特定頁面。這相當於asp.net MVC的功能。

19

我剛碰到這個問題,知道必須有辦法做到這一點。有 -

MapPageRoute有一個重載,允許您指定默認值。這裏有一個基於你的代碼的例子用法:

routes.MapPageRoute(
     "ProductsBrowse", 
     "browse/{BrowseBy}/{Category}", 
     "~/Pages/Products/Browse.aspx", 
     false, 
     new RouteValueDictionary { { "Category", string.Empty } } 
    ); 

所以如果用戶沒有指定一個類別,這條路線仍然會被擊中。我使用兩條單​​獨路由的問題是,我在我的站點周圍設置了由路由名稱生成的鏈接,並且不能有兩個具有相同名稱的路由。

這裏有良好的文檔從MSDN:here

6

試試這個:

routes.MapPageRoute(
      "ProductsBrowse", 
      "browse/{BrowseBy}/{Category}/{*queryvalues}", 
      "~/Pages/Products/Browse.aspx" 
     ); 
+0

感謝這個有用的提示。 – 2016-02-03 10:38:07