2014-02-17 62 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