2011-03-09 3 views
36

ASP.NET MVC3에서 영역을 구성하는 방법을 알고있는 사람이 누구입니까? 지역에 관한 기사를 here에 실었습니다. 그러나이 기사는 MVC3을 기반으로하지 않습니다. MVC3에서 내가 MVC3를 사용하여 새로운 영역을 만들 때 Global.asax에ASP.NET MVC3에서 영역을 구성하는 방법

routes.MapRootArea("{controller}/{action}/{id}", 
       "AreasDemo", 
        new { controller = "Home", action = "Index", id = "" }); 

에서 발견된다 RouteCollection routesMapRootArea를라는 이름의 기능이 없다, 나는 AreaRegistration에서 상속하고 다음과 같이 그 지역의 클래스를 가지고 :

public class BlogsAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "Blogs"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Blogs_default", 
      "Blogs/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

사람이 내가 MVC3에서 영역을 구성 어떻게 좀 도와 주시겠습니까 (여기 블로그는 지역 이름입니다). 어떤 종류의 링크도 도움이 될 것입니다.

답변

40

웹 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 추가 -> 영역 ...을 선택하고 영역의 이름을 입력하면 Visual Studio가 나머지 클래스를 처리하여 필요한 모든 클래스를 생성합니다.

public class AreasDemoAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "AreasDemo"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "AreasDemo_default", 
      "AreasDemo/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

과의 Application_StartGlobal.asax 당신이 필요로하는 모든입니다 : 예를 들어 지역 등록은 다음과 같을 수

AreaRegistration.RegisterAllAreas(); 
+0

답변을 주셔서 감사합니다. 지역이 제대로 등록되어 있는지 어떻게 알 수 있습니까? 내 공유 된 _layout에서이 링크를 사용했지만 어디에서나 Html.ActionLink ("Blog", "About", "Home", new {area = "Blog"})를 사용하지 않습니다. – Imrul

+0

@Imrul, 당신의 코드는'Blog'가 아니라'Blogs'라고 불리는 코드이므로'@ Html.ActionLink ("Blog", "About", "Home", 새로운 {area = "Blogs"})'를 시도하십시오. 또한이 영역 내에'HomeController'가 있는지 확인하십시오. –

+0

죄송합니다. 맞춤법 오류입니다. 내가 내 _layout에 렌더링하면 Area/Controller/Action "@ Html.ActionLink ("Blog ","Index ","BlogHome ", new {area =" 블로그 "})". ActionLink 도우미에서 잘못된 것이 있습니까? 이제 루트와 영역에서 동일한 컨트롤러 이름을 사용할 수 없음을 알게되었습니다. 이를 위해 Home을 BlogHome으로 개명해야했습니다. FYI Blog은 생성 된 html이며 http : // localhost : 4135/Blogs/BlogHome/Index를 사용하여 BlogHome 컨트롤러를 조회하고 페이지를 표시합니다. – Imrul

5

당신은 루트에 동일한 컨트롤러 이름과 영역을 가질 수 있습니다, 당신은 그냥 정의해야합니다. 당신의 Global.asax에서

, 또한

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

아래 그림과 같이 routes.maproute의 마지막 줄을 추가하여 아르에있는 컨트롤러의 이름을 추가/????? AreaRegistration.cs 파일

context.MapRoute(
     "Membership_default", 
     "Membership/{controller}/{action}/{id}", 
     new { controller= "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
1

아래 이미지는 mvc에서 영역을 구성하는 방법을 보여줍니다. enter image description here

관련 문제