2013-06-18 3 views
18

내 영역이 아래입니다. 해당 부분 만 강조 표시됩니다.하위 폴더의 컨트롤러

enter image description here

경로 테이블

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "SubFolder", // Route name 
     "SubFolder/ChildController", 
     new { controller = "ChildController", action = "Index" }, 
     new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" }); 


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

This only works when the url is like this 
localhost:2474/SOProblems/ChildController/index 

This does not works when the url is like this 
localhost:2474/SOProblems/SubFolder/ChildController/index 

당신이없는 걸 말해 주시겠습니까?

+0

"작동하지 않음"은 정확히 무엇을 의미합니까? – TGlatzer

+0

@ Grumbler85 - 마지막 시도한 URL은 404, –

+0

입니다. Backtick은 여기에 "SubFolder'/ChildController"입니까? 그리고 하위 폴더 내의 네임 스페이스가 올바르게 설정되어 있는지 확인하십시오. – TGlatzer

답변

14

이 작동하지 않습니다이 로컬 호스트 :/ChildController/인덱스 정상

2474/SOProblems/하위 폴더. 경로 패턴은 SubFolder/ChildController이며 SubFolder/ChildController/index이 아닙니다. 그 외에도 WRONG 장소에서 경로를 정의했습니다. 기본 라우트 정의에서 정의했지만 사용자의 지역 라우트 정의에서는 정의하지 않았습니다. 그래서 메인 루트에서 사용자 정의 경로 정의 없애과 (당신의 SOProblems 루트는 등록 할 위치 임) SOProblemsAreaRegistration.cs 파일에 추가 : 또한

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "SubFolderRoute", 
     "SOProblems/SubFolder/ChildController", 
     new { controller = "ChildController", action = "Index" }, 
     new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" } 
    ); 

    context.MapRoute(
     "SOProblems_default", 
     "SOProblems/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional } 
    ); 
} 

를 경로 패턴입니다 (SOProblems/SubFolder/ChildController)를 가지고 있지 않습니다 액션 이름을 지정할 수있는 가능성은이 컨트롤러에서 단 하나의 액션 만 가질 수 있으며이 경우에는 (index) 등록한 기본 액션이됩니다. 주 경로의 정의는 디폴트 값으로 남아 있었다 두 경우 모두

context.MapRoute(
    "SubFolder", 
    "SOProblems/SubFolder/ChildController/{action}", 
    new { controller = "ChildController", action = "Index" }, 
    new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" } 
); 

:이 컨트롤러의 추가 조치가 아직 인덱스가 기본이 경로 패턴이를 포함해야 하나 싶었다면

:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default", 
     "{controller}/{action}", 
     new { controller = "Home", action = "Index" } 
    ); 
} 
+2

"RegisterArea"의 출처는 어디입니까? 저는 결과를 제로로 전체 솔루션을 검색했습니다. – usefulBee

+0

@usefulBee "RegisterArea"는 Visual Studio가 새로운 _Add> Area를 스캐 폴딩 할 때 발생합니다 ... _ – Jasen

5

귀하의 새 경로 "SubFolder"에는 경로 (귀하의 경우 "색인")에 작업을 포함 할 가능성이 없습니다.

샘플 URL은

localhost:2474/SOProblems/SubFolder/ChildController/index 

같은 경로와 일치하려고 싶어 :

"SubFolder/ChildController/{action}" 

을하지만 '원, 그래서 당신은 당신의 경로에 "{동작}"는 포함되지 않습니다 너의 길을 찾지 마라. 그런 다음 분명히 실패하는 기본 경로를 시도합니다. 경로에 "{조치를}"추가

시도 :

routes.MapRoute(
    "SubFolder", // Route name 
    "SubFolder/ChildController/{action}", 
    new { controller = "ChildController", action = "Index" }, 
    new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" }); 

이나 걸릴 "인덱스"테스트 URL 끕니다. URL이 같은 경우

+2

이것은 작동하지 않습니다. –