2009-07-06 23 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