带可选参数的MVC4路由问题

时间:2014-02-11 16:35:51

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

我在RouteConfig.cs中创建了一个新的路由。

routes.MapRoute("Edit_Personal", 
                "Edit/Personal/{userID}/{refKey}/{houseID}", 
                 new {controller = "Edit", action = "Personal", 
                      userID = UrlParameter.Optional, 
                      refKey = UrlParameter.Optional, 
                      houseID = UrlParameter.Optional });

如果我传入类似的内容,这条路线就可以了。

Edit/Personal/78887/abcd/

UserID = 78887
RefKey = abcd
HouseID = null

但是,如果从未传递RefKey(它是可选的),但是传递了HouseID,我会将其作为结果(URL):

Edit/Personal/78887//88881   <--- Notice the two slashes between the numbers.

UserID = 78887
RefKey = 88881
HouseID = null

我预期的结果是:

UserID = 78887
RefKey = null
HouseID = 88881

如果您注意到,RefKey应为NULL,但是,它将HouseID绑定到RefKey参数。

有没有办法纠正这个?我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

您需要定义多条路线,如下所示:

routes.MapRoute(
    "WithAll",
    "{controller}/{action}/{UserID}/{RefKe}/{HouseID}",
    new{ controller = "Edit",action = "Personal"});

routes.MapRoute(
     "WithoutRefke",
     "{controller}/{action}/{UserID}/{HouseID}",
     new{controller = "Edit",action = "Personal"});

routes.MapRoute(
     "WithoutRefkeAndHouseID",
     "{controller}/{action}/{UserID}",
     new{controller = "Edit",action = "Personal",UserID= UrlParameter.Optional});

请查看以下链接以获取更多详细信息: http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx/

相关问题