2011-12-20 3 views
0

다른 컨트롤러를 참조하는 여러 경로가 있고 경로 수가 동일한 매개 변수 수가 있습니다. 아래 샘플을 보시기 바랍니다ASP.NET 여러 경로 및 잘못된 데이터 경로 값

routes.MapRoute("AdInfo", "{controller}/{action}/{AdGUID}/{UserID}/{Category}", 
    new 
    { 
     controller = "Home", 
     action = "DetailAd", 
     AdGUID = UrlParameter.Optional, 
     UserID = UrlParameter.Optional, 
     Category = UrlParameter.Optional 
    }); 

routes.MapRoute("PostAd", "{controller}/{action}/{MainCategory}/{SubCategory}/{SubCategoryGUID}", 
    new 
    { 
     controller = "Classified", 
     action = "Post", 
     MainCategory = UrlParameter.Optional, 
     SubCategory = UrlParameter.Optional, 
     SubCategoryGUID = UrlParameter.Optional 
    }); 

경로 AdInfo와 PostAd에는 세 개의 매개 변수가 있지만 둘 다 서로 다른 컨트롤러와 동작을 나타냅니다. asp.net mvc 내가 잘못 컨트롤러 데이터 링크를 MainCategory, 하위 범주 및 subcategoryGUID 경로 데이터 값을 가진 작업 게시물에 연결하는 URL을 클릭하면 해석합니다. 어떻게 든 경로 데이터 값은 AdGUID, UserID 및 category입니다.

이 문제를 해결하는 방법에 대해 알고 계십니까?

답변

0

거의 다 왔으므로, 기본적으로 두 개의 캐치 올 경로 설정을 제외하고는 모든 경로를 캐치하고 기본값을 지정합니다. 이것은 최소한 다음과 같아야합니다.

routes.MapRoute("AdInfo", "Home/{action}/{AdGUID}/{UserID}/{Category}", 
    new 
    { 
     controller = "Home", 
     action = "DetailAd", 
     AdGUID = UrlParameter.Optional, 
     UserID = UrlParameter.Optional, 
     Category = UrlParameter.Optional 
    }); 

routes.MapRoute("PostAd", "Classified/{action}/{MainCategory}/{SubCategory}/{SubCategoryGUID}", 
    new 
    { 
     controller = "Classified", 
     action = "Post", 
     MainCategory = UrlParameter.Optional, 
     SubCategory = UrlParameter.Optional, 
     SubCategoryGUID = UrlParameter.Optional 
    }); 

물론 어떤 상황에서는 이것이 작동하지 않습니다. 바로 그때,

routes.MapRoute("AdInfo", "{Controller}/{action}/SomeNameThatSeperatesThisRouteFromTheNext/{AdGUID}/{UserID}/{Category}", 

또는 두 번째 경로에 작업이 항상있을 것입니다 경우 같은 :이 같은 컨트롤러 후 접미사를 추가하여 너무 여러 컨트롤러에 대한이 경로를 사용할 수있는 볼 수있는 유일한 방법 하드 코드를 라우트에 넣으면 두 개의 별개의 라우트가 생깁니다 (하드 코드가 다른 라우트보다 먼저 선언되었는지 확인하십시오).