使用可选参数的路由不正确

时间:2013-11-22 16:20:16

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

我想扩展控制器操作以接受可选参数。换句话说,我希望现有代码继续工作,但添加一些可以传递其他信息的新功能。我修改了我的routeprovider,controller,并测试了它。可选参数和路由都很有效。所以我做了一个回归测试,看看现有的代码仍然可以工作,你猜对了。它没有。

那么我做错了什么/不理解?我以为我可以使用现有的控制器操作,它可以使用或不使用可选参数吗?

我没有发布我的控制器代码,因为我不相信它会发挥作用。我在第一行设置断点并且从未到达那里,所以在我看来我的routeprovider有错误。如果需要其他代码,我很乐意添加它。

这适用:domain.com/signup/12345

这不过但过去工作得很好:domain.com/signup

routes.MapLocalizedRoute("SignUp", "signup/{CampaignId}",
new {controller="Customer", action="NewSignup", CampaignId=UrlParameter.Optional},
new { CampaignId = @"\d+" },
new[] { "Domain.PROJECT.Controllers" });

所以我希望上面的两个url示例能够正常工作。我当然可以在没有campaignid的情况下添加另一条路线,并将其指向同一个控制器动作但又一次......我想到......这就是让campaignid可选的背后的想法???

新的{CampaignId = @“\ d +”},对象约束是否覆盖了可选参数,并且基本上强制了campaignid存在?

谢谢

1 个答案:

答案 0 :(得分:1)

只需定义两条路线即可。

需要活动的人:

routes.MapLocalizedRoute("SignUpCampaign", "signup/{CampaignId}",
                         new { controller="Customer", action="NewSignup" },
                         new { CampaignId = @"\d+" },
                         new[] { "Domain.PROJECT.Controllers" });

一个不要求它:

routes.MapLocalizedRoute("SignUp", "signup",
                         new { controller="Customer", action="NewSignup" },
                         null,
                         new[] { "Domain.PROJECT.Controllers" });