2010-08-13 3 views
5
내가 같은 URL을 가질 수 있도록 MVC2 응용 프로그램의 영역에 하위 도메인을 매핑 마틴 Balliauw의 Domain Route 클래스를 사용하려고 해요

:라우팅의 의견을 내 분야에서 컨트롤러를 찾는 것이 아니라,

http://admin.mydomain.com/home/index 

대신 :

http://mydomain.com/admin/home/index 

지금까지, 나는 단지 부분적인 성공을 거두었습니다. 올바른 영역의 올바른 컨트롤러로 실행이 라우팅되고 있지만 올바른보기를 찾을 수 없습니다. 나는 다음과 같은 오류가 발생 해요 :

The view 'Index' or its master was not found. The following locations were searched: 
~/Views/AdminHome/Index.aspx 
~/Views/AdminHome/Index.ascx 
~/Views/Shared/Index.aspx 
~/Views/Shared/Index.ascx 

이 MVC는 루트 뷰 폴더에보기를 찾고되고 뷰가 지역 내에서 폴더를하지 않는 것이 나에게 나타냅니다. 영역 뷰 폴더의 뷰를 루트 뷰 폴더로 복사하면 페이지가 잘 렌더링됩니다. 그러나 이것은 APP를 영역으로 나누는 목적을 완전히 무효로 만듭니다.

내가 같은 영역에 대한 경로를 정의하고 있습니다 :

public class AdminAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get { return "Admin"; } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.Routes.Add(
      "Admin_Default" 
      , new DomainRoute(
       "admin.localhost" 
       , "{controller}/{action}/{id}" 
       , new { controller = "AdminHome", action = "Index", id = UrlParameter.Optional } 
     )); 
    } 
} 
나는 그것이 좋은 지역 내 컨트롤러를 찾는 이유에 혼란 스러워요

가 아니라 볼 수 있습니다.

답변

3

좋아요, 알아 냈습니다. MVC 2 소스 코드를 다운로드하고 here의 윤곽을 그리면 내 솔루션에 추가 한 후 MVC 코드를 살펴 보았습니다. 영역 내의 경로가 IRouteWithArea 인터페이스를 구현한다는 것을 알았습니다. 이 인터페이스는 'Area'속성을 RouteData에 추가합니다. RouteData에는 해당 지역의 이름이 포함되어 있습니다. DomainRoute 클래스를 수정하여이 인터페이스를 구현하고이 추가 매개 변수를 사용하는 오버로드 된 생성자 몇 개를 추가했습니다. 이제는 원하는만큼 정확하게 작동합니다.

지금 내 길을 등록하는 코드는 다음과 같습니다

context.Routes.Add(
    "Admin_Default" 
    , new DomainRoute(
     "admin.mydomain" 
     ,"Admin" 
     , "{controller}/{action}/{id}" 
     , new { controller = "AdminHome", action = "Index", id = UrlParameter.Optional } 
     )); 
+0

+1 이것은 꽤 오랫동안 당황 스러웠습니다. 이 지역의 정확한 컨트롤러가 발견되었지만 잘못된보기가 렌더링 된 것을 발견하면 신속하게 질문과 답변을 찾았습니다. – Marijn

1

지역과 기본 경로 사이에 컨트롤러 이름을 공유하고있는 것처럼 보이면 MapRoute으로 전화 할 때 네임 스페이스를 식별해야 할 수 있습니다.

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}",   
    new { action = "Index", id = UrlParameter.Optional }, 
    null, 
    new string[] { "Web.Controllers" } 
); 

을 다음 AdminAreaRegistration.csRegisterArea moethod는 같이 보일 것입니다 : 웹 응용 프로그램의 최상위 네임 스페이스 Web 인 경우

예를 들어, Global.asax.cs 파일의 RegisterRoutes 방법은 다음과 같을 것 이 :

context.MapRoute(
    "Admin_Default", 
    "Admin/{controller}/{action}/{id}", 
    new { action = "Index", id = UrlParameter.Optional }, 
    null, 
    new string[] { "Web.Areas.Admin.Controllers" } 
); 
+0

무엇 하나 개 이상의 경로를 추가하는 방법에 대한? Admin_Default 이외의 경로가 필요한 경우에는 어떻게해야합니까? 다른 컨트롤러 및 작업에 대한 경로를 관리자 영역에서 추가로 원한다면 어떻게해야할까요? 나는 아직 누군가가 그 예를 보여줄 것을 보지 못했다 ... 지역을 가리키는 기본 경로를 처리하는 방법에 대한 예제 만 보여준다. – PositiveGuy

관련 문제