2012-06-14 47 views
0

考慮以下兩個定義的路由:MVC3路由 - 如何確保具有特定值的路由優先?

 routes.MapRoute(name: "CityCategoryPage", url: "{city}-{state}/{categoryName}/__c/", defaults: new { controller = "Home", action = "GeoSubCategories" }); 
     routes.MapRoute(name: "CityStateCategoryResults", url: "{city}-{state}/{categoryName}/{searchTerm}/{pageNumber}/{pageSize}", defaults: new { controller = "Results", action = "SearchCityStateCategory", pageNumber = UrlParameter.Optional, pageSize = UrlParameter.Optional }); 

如果我刪除了第二條路線,我得到看到主頁上的結果預期的作用。然而,現在的第二條路線,我總是被轉發到結果頁面。

我有一個想法,爲什麼會發生這種情況:「_ c」仍被視爲可選參數,它匹配第二條路線的可選條件,但不知道如何使其工作。我不想在網址上追加「 _c」 - 也想知道是否有其他解決方法?

謝謝。

回答

1

如果我的理解正確,您希望在沒有提供搜索詞的情況下顯示首頁?

如果是的話,儘量配合可選的搜索關鍵詞第一的路線,並默認主頁途徑,如果沒有SEARCHTERM存在,就像這樣:

routes.MapRoute(name: "CityStateCategoryResults", url: "{city}-{state}/{categoryName}/{searchTerm}/{pageNumber}/{pageSize}", defaults: new { controller = "Results", action = "SearchCityStateCategory", pageNumber = UrlParameter.Optional, pageSize = UrlParameter.Optional }); 
routes.MapRoute(name: "CityCategoryPage", url: "{city}-{state}/{categoryName}/", defaults: new { controller = "Home", action = "GeoSubCategories" });