2014-02-17 61 views
0

這是我的自定義路線.NET自定義路線覆蓋正常

// custom route 
routes.MapRoute(
    "Custom", 
    "Town/{townName}/{restaurantID}", 
    new { controller = "Town", action = "View", restaurantID = UrlParameter.Optional } 
); 

問題是,當我在Create行動網址是點擊(因爲它應該是)Town/Create但現場承認CreatetownName這是問題... Edit也一樣。

謝謝。

回答

1

不幸的是,你正在處理2個非常通用的路線。無論先訂購哪一種都有優先權,但兩種訂購都不會滿足您的要求。解決此問題的最簡單方法是使用約束或爲「創建」和「編輯」指定其他路徑。

下面是創建其他路線以使「創建」和「編輯」顯式化的樣子。

注意:請記住,使用此URL結構,您永遠不會有名爲「編輯」或「創建」的城鎮。幸運的是,這些城市似乎並沒有給地球(還)上存在,但刪除鎮擔心:http://nona.net/features/map/placedetail.2381031/D%C3%A9l%C3%A9t%C3%A9/

routes.MapRoute(
    "Town_Edit", 
    "Town/Edit/{restaurantID}", 
    new { controller = "Town", action = "Edit" } 
); 

routes.MapRoute(
    "Town_Create", 
    "Town/Create/", 
    new { controller = "Town", action = "Create" } 
); 

routes.MapRoute(
    "Town", 
    "Town/{townName}/{restaurantID}", 
    new { controller = "Town", action = "View", restaurantID = UrlParameter.Optional } 
); 

// Default route here 
+0

只是一個問題:你也可以寫約束的版本? –

+0

明白了:new {townName =「((?!^ Create | Edit $)(^。* $))」} //限制「Create」和「Edit」townName –

+0

好聽! 。 – smdrager