2009-07-06 54 views
2

對於ASP.MVC來說相當新穎我正在尋找解決以下路由問題的方法。根據url中的可選操作值進行路由

我想這些網址,以導致顯示頁面:

/會員/ 123/A +奇怪+用戶名 - >與會員頁面詳細
/會員/ 123 - >如上
/會員/連接/ 123 - >用構件連接列表
/會員/連接/ 123/A + +奇怪用戶名頁面 - >如上
/會員/的Comme NTS/123 - >與成員的名單頁面評論
/會員/評論/ 123/A +奇怪+用戶名 - >如上

名應忽略,但將附加到鏈接,以幫助搜索引擎。

我曾嘗試用以下路線:

routes.MapRoute("MemberPage", "Member/{id}/{*name}", new { controller = "Member", action = "Details", id = "" }); 
routes.MapRoute("MemberAction", "Member/{action}/{id}/{*name}", new { controller = "Member", action = "Details", id = "" }); 

但似乎它總是默認爲第一路線,然後得到一個錯誤,因爲「連接」或「註釋」是無效的id的詳細信息控制器。

有沒有辦法切換路線取決於id值的類型,或另一種方法來解決這個問題?

回答

5

如果向兩個路由的{id}添加路由約束,可能會有所幫助。

routes.MapRoute("MemberPage", "Member/{id}/{*name}", 
     new { controller = "Member", action = "Details", id = "" }, 
     new { [email protected]"\d+" }); 
routes.MapRoute("MemberAction", "Member/{action}/{id}/{*name}", 
     new { controller = "Member", action = "Details", id = "" }, 
     new { [email protected]"\d+" }); 

這樣,就不會試圖在第一路「的評論」爲{ID}映射,並始終陷入第二個它應該可以正常工作與URL。

+0

工程像魅力!謝謝! – hbruce 2009-07-07 06:24:25