2013-11-22 2 views
0

컨트롤러 매개 변수를 확장하여 선택적 매개 변수를 허용하려고했습니다. 즉, 기존 코드가 계속 작동하기를 원하지만 추가 정보를 전달하는 새로운 기능을 추가해야했습니다. 내 routeprovider, 컨트롤러를 수정하고 테스트했습니다. 선택적 매개 변수 및 라우팅 모두 잘 작동했습니다. 그래서 회귀 테스트를 수행하여 기존 코드가 여전히 작동 하는지를 추측했습니다. 그렇지 않았습니다.선택적 매개 변수가있는 잘못된 라우팅

그래서 내가 뭘 잘못하고 있니? 기존 컨트롤러 동작을 사용할 수 있다고 생각했는데 선택적 매개 변수를 사용하거나 사용하지 않고 사용할 수 있습니까?

컨트롤러 코드를 게시하지 않았습니다. 작동하지 않을 것으로 생각됩니다. 나는 첫 번째 라인에서 중단 점을 설정하고 결코 거기에 도착하지 않으므로 내 routeprovider에 오류가있는 것 같습니다. 다른 코드가 필요한 경우 기꺼이 추가 할 것입니다.

이 작동 : 그래서 위의 두 URL 샘플을 부탁

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

domain.com/signup : domain.com/signup/12345

이는하지만 잘 작동하는 데 사용되지 않습니다 일하다. 나는 물론 campaignid없이 다른 경로를 추가 할 수 있으며 같은 컨트롤러 액션을 가리킨다.하지만 다시 ... 나는 생각했다 ... 그것은 선거 운동을 선택적으로 만드는 아이디어였다.

새로운 {CampaignId = @ "\ d +"}, 개체 제약 조건이 선택적 매개 변수를 무시하며 기본적으로 캠페인 ID를 강제로 적용합니까?

고맙습니다.

+0

'새 {CAMPAIGNID = @ "\ D *"}'을해야한다. – shakib

+0

@shakib 그것은 아무 것도 깨지 않았지만 경로가 매개 변수와 함께 또는 매개 변수없이 작동하도록 허용하지 않았습니다. – GPGVM

+0

어쩌면 내가 오해했을 수도 있지만'new {CampaignId = @ "\ d *"}'제약 조건을 사용하는'MvcRouteHandler' 같은 기본 라우트 핸들러는'site.com/signup'과'site.com/signup /'과' site.com/signup/123' – shakib

답변

0

두 경로 만 정의하면됩니다.

하나는 campaingId을 필요로 :

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" }); 
+0

나는 그것이 효과가있을 것이라고 생각하지만 반창고입니까? 나는 당신이 단지 이해하려고 애쓰는 것이 아니라고 생각합니다. – GPGVM

+0

선택적 매개 변수와 해당 매개 변수에 대한 제약 조건이있는 경우 경로가 일치하는지 확실하지 않았습니다. 약간의 연구 결과는 결코 일치하지 않음을 보여줍니다 : http://stackoverflow.com/questions/3468115/optional-routing-parameter-with-constraint-in-asp-net-mvc-2 –

관련 문제