2011-08-15 5 views
0

새 경로를 정의했습니다 (아래 참조). 나는 응용 프로그램을 시작할 때, 나는 기본적으로 싶습니다ASP.NET MVC에서 경로 정의

  • 이동 홈/색인
  • 을 내가 이것을 사용하면

을 "MyCode"를 얻을 MyCode// 고객/상세보기로 이동하는 경우 구성, 나는 집에서 시작/인덱스 괜찮아요/고객/세부/MyCode는 항상 null 값을 제공합니다. 내가 routes.MapRoute을 반전하면

, 내가 가진 : 기본적으로

  • 내가/고객/세부에 가서 내가
  • 그렇게하지 (더 널 anymoe) mycode 값을 항상 얻을 시작/홈/색인

어떤 생각?

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

routes.MapRoute(
    "CustomerDetail", 
    "{controller}/{action}/{code}", 
    new { controller = "Customer", action = "Detail", code = UrlParameter.Optional } 
); 

답변

3

하나의 경로는 충분히 될 것입니다 : 당신이 Home/Index을 요청하면

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

이이 HomeControllerIndex 조치를 호출하고 code 매개 변수로 null을 전달하고 Customer/Detail/MyCode를 요청할 때 Detail 작업이 될 것입니다 것입니다 CustomerController에 호출되어 code=MyCode이 전달되었습니다.

당신이 널지고 있었다 이유는 모두 당신의 경로들이 모두 URL에 대한 첫 번째 경로가 일치하는 것을 의미 형태 Controller/Action/SomeCode의 것을 의미 동일하지만, 매개 변수가 id 대신 그래서 당신이 code의라고한다는 것입니다 점점 code=null이됩니다.

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

을 다음 ID로 Detail 행동을 매개 변수의 이름을 변경 :

public ActionResut Detail(string id) 
{ 
    // if you request Customer/Detail/MyCode the id parameter will equal MyCode 
} 
이의 값을받을 수 없습니다
+0

홈/색인 I를 의미 또 다른 가능성은 단순히 기본 경로를 떠날 것입니다/Customer/Detail/MyCode ...로 가고 싶습니다. 나는 그것을 원하지 않습니다. 나는 응용 프로그램을 시작하고/홈/색인을 유지해야합니다. 나중에, 나는/Product/Detail/MyCode 같은 것을 가질 것이다. id는 관련이 없다. id라는 코드가 아니다. –

관련 문제