具有可选参数的索引操作的控制器

时间:2012-06-22 05:14:57

标签: .net asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我想为“用户”控制器设置索引操作,该控制器采用可选参数。

/Users/{id}

或者

/Users

我想避免:

/Users/Index/{id}

或者

/Users/Index/

我添加了一个路由来映射/ Users / {id}到Index操作。

routes.MapRoute( "Users",
                 "Users/{id}",
                 new { controller = "Users", action = "Index", id =
                 UrlParameter.Optional});

工作正常。当我向Users控制器添加另一个操作“Add”(也带有可选参数)时,我遇到了一个问题。我之前添加的路由误解了Add作为Index操作的参数。 “用户/添加”会触发“索引”操作。

我怎样才能充分利用两者?

感谢。

2 个答案:

答案 0 :(得分:2)

constraints 属性设置为仅允许数字。这应该可以解决您的路由问题。

routes.MapRoute( "Users",
    "Users/{id}",
    new { controller = "Users", action = "Index", id = UrlParameter.Optional },
    new { id = "[0-9]+" }
);

修改

您可以在不使用正则表达式约束的情况下以不同方式执行此操作。明确添加路线用户/添加,在索引路线之前添加

routes.MapRoute( "Users",
    "Users/Add/{id}",
    new { controller = "Users", action = "Add", id = UrlParameter.Optional }
);

答案 1 :(得分:0)

您无需为控制器上的每个操作创建路径。创建项目开始时在global.asax中的默认路由足以满足您的需求:

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