2010-12-13 8 views
0

나는ASP.NET MVC 3 RC 2 라우팅 문제

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

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

에서 ASP.NET MVC의 기본 라우팅을 변경하지만 지금은 모든 @ Html.ActionLink() 호출은 렌더링 to href = "". 경로를 기본값으로 다시 변경하면 모든 링크가 다시 작동합니다.

RC1과 동일한 경로를 사용했으며 완벽하게 작동했습니다.

릴리스 문서에서 아무 것도 찾지 못했지만 잘못하고 있다고 생각합니다. 경로에서

감사합니다, 스테 펜

답변

2

는 선택적 매개 변수는 마지막에 나타날 수 있습니다. 즉, 경로 정의에서 id 매개 변수 을 선택 사항으로 사용할 수 없습니다. 명시 적으로 값을 설정해야합니다.

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

그리고 당신은 링크를 생성 할 때이 경로가 일치 할 경우, 당신은 항상 id 매개 변수에 대한 값을 제공해야합니다 : 당신이 ID에 기본 값을 줄 수있는 대안으로

@Html.ActionLink("some link", "index", new { id = "123" }) 

매개 변수 :

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}/{lineNo}", 
    new { 
     controller = "Home", 
     action = "Index", 
     id = "123", 
     lineNo = UrlParameter.Optional 
    } 
); 

이제 링크에 더 이상 지정할 필요가 없습니다.

+0

RC2의 새로운 기능입니까? – forki23

+2

잘 모르겠습니다. 어쩌면 이전 버전에서 작동했을 수도 있지만, ID가 선택 사항 인 경우 라우팅 엔진이 id 매개 변수와 lineNo 매개 변수를 모호하게 할 수 없기 때문에 의미가없는 라우트 정의입니다. 어쩌면이 규칙은 IMHO 인 RC2에 적용되었을 수도 있습니다. –

+0

감사합니다. 나는 두 부분으로 규칙을 쪼개었지만 지금은 잘 작동합니다. – forki23