2009-06-16 37 views
2

我想建立一個具有正常CRUD操作的控制器的路由,但希望詳細信息操作不在URL中顯示'詳細信息'。計算器似乎有這種類型的路由配置:如何刪除MVC URL路由中的'Details',但保持其他操作不變?

http://stackoverflow.com/questions/999999/ 
http://stackoverflow.com/questions/ask 

使用這個比喻,我的路線目前是這樣的:

http://stackoverflow.com/questions/Details/999999/ 

通過將以下途徑我能得到Details刪除:

routes.MapRoute("Q1", "questions/{id}", 
    new { controller = "Questions", action = "Details" }); 

但是,拉起控制器上的其他動作(例如本例的/questions/new)是抱怨無法解析id。

有沒有一種方法來設置路由,以便我不必手動輸入所有其他操作(MapRoute「items/create」,「items/delete」等)到Global.asax中的.cs?我基本上是想有一個像第二條路線:

routes.MapRoute("Q2", "questions/{action}", 
    new { controller = "Questions", action = "Index" }); 

...並具備路由引擎使用路線Q1如果{id}整數匹配,並且{action}如果它是一個字符串。這可能嗎?

回答

6

如果你把路由約束放在第一個路由上,這樣id字段只能是一個整數,那麼我相信任何其他的行爲都會回到默認值。

routes.MapRoute("Q1", 
    "questions/{id}", 
    new {controller = "Questions", action = "Details"}, 
    new { [email protected]"\d+" }); 

其他任何事情都應該由默認路由處理。所以「問題/ 3553」會觸及這個問題,但「問題/問題」不會匹配。您可能需要首先在您的Global.asax.cs文件中放置更具體的路線。

+0

這工作完美。但請注意,約束條件需要讀作@「\ d +」。 – Jason 2009-06-16 13:16:20

相關問題