我在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参数。
有没有办法纠正这个?我错过了什么吗?
答案 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/