2013-01-16 45 views
2

如果我有下面的圖路線:MVC3 maproute不顯示操作?

routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
     new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
); 

我能有一個像網址:

blabla.com/Home/Index/123

但是,什麼樣圖路線的,我需要創造能夠做到這一點:

blabla.com/Home/123 or blabla.com/Home/DEADBEEF

我想象它涉及沿 "{controller}/{id}/{action}"

行動和id的反轉線的東西,也許應該有一個默認的動作。但MapRoute如何知道哪個控制器應該像這樣對待?

+0

你有最後一個段的約束(只允許數字等)嗎? –

+0

@UfukHacıoğulları不,它應該最好是一個字符串。 – ProgrammerAtWork

+0

你試過刪除'/ {action}'嗎? – BjarkeCK

回答

3

您可能需要沿着這些方向。

routes.MapRoute(
     name: "DefaultRoute", 
     url: "Home/{action}", 
     defaults: new { controller = "Home", action = "Index" }, 
     constraints: new { action = "[A-Za-z]*" } 
); 

或不動作

routes.MapRoute(
     name: "DefaultRoute", 
     url: "Home/{id}", 
     defaults: new { controller = "Home", action = "Index", id = "" }, 
     constraints: new { id = "[A-Za-z]*" } 
); 

您需要確保路由名稱是比你有安裝任何其他的途徑不同,要注意路線的其它路線的順序是是類似的可以相互覆蓋。在這種情況下,請確保您可能希望在默認路由之前進行此操作,但請注意它會覆蓋它。

至於沒有控制器,甚至行動,你可以設置默認值,並不需要他們在路線內。

至於約束,您可以簡單地將約束參數添加到路由中,以便爲特定屬性設置正則表達式,如上所示。

編輯: 這裏有一些有用的鏈接瞭解更多路由信息,如果你需要的話。

2

您可以添加這樣的路線:

routes.MapRoute(
    "CustomRoute", 
    "Home/{id}", 
    new { controller = "Home", action = "Index", id = "" }); 

確保你把它的默認路由以上。然而,這條路線將阻止HomeController中的所有其他操作。由於我們對id參數沒有約束,因此框架無法知道您是在引用URL中的操作還是id。由於這條路線首先出現,它會將其映射到id參數。

+0

放置自定義路線首先解決了我的問題。你得到我的投票。 –