2011-09-16 49 views
0

我想優化URL的外觀如下圖所示:增加了一個路線和行爲改變

http://localhost:3817/Affaire/SearchAffaires?OnlyFavorite=True

所以我增加了一個新的途徑:

 routes.MapRoute(
     "Search Affaire Only Favorite", // Route name 
     "{controller}/{action}/OnlyFavorite", // URL with parameters 
     new { controller = "Affaire", action = "SearchAffaires", OnlyFavorite = true } // Parameter defaults 
     ); 

現在的網址是更易於閱讀:

http://localhost:3817/Affaire/SearchAffaires/OnlyFavorite

但是發生了一個新問題:由於路由原因,我的頁面上的其他鏈接發生了更改!

實例位置:.../AFFAIRE/SearchAffaires標籤=巴克斯特& OnlyLabel =真& OnlyFavorite =真

之前,它是:???/ AFFAIRE/SearchAffaires標籤=巴克斯特& OnlyLabel = True

如您所見,變量OnlyFavorite已被添加到URL中。最後我發現了這種行爲的原因:路由系統熱衷於與路由進行匹配,以至於它將重用傳入URL中的段變量值。處理這種行爲的最好方法是防止它發生。強烈建議您 不依賴於此行爲,並且您爲URL模式中的所有段變量提供值。

這有點煩人,因爲我有很多變數!

有關該問題的任何解決方案?爲什麼這種行爲不會發生在單一路線(默認路線)?

感謝

回答

0

它看起來像如果我註冊這樣的路線,我從問題脫身:

routes.MapRoute(
    "Search Affaire", // Route name 
    "{controller}/{action}", // URL with parameters 
    new { controller = "Affaire", action = "SearchAffaires" } // Parameter defaults 
    ); 
routes.MapRoute(
     "Search Affaire Only Favorite", // Route name 
     "{controller}/{action}/OnlyFavorite", // URL with parameters 
     new { controller = "Affaire", action = "SearchAffaires", OnlyFavorite = true } // Parameter defaults 
     ); 
+0

因爲路線的順序應用,你沒有任何問題,他們出現在RouteCollection中。第二個(在這種情況下)永遠不可達。這不是一個解決方案。 – Bronzato

+0

這是不正確的,因爲我已經測試和本地主機/ affaire/searchaffaires/onlyfavorite作品。 – Giedrius