2012-10-16 2 views
17

개별 프로젝트의 영역을 사용하여 간단한 proof-of-concept ASP.NET MVC 4 웹 사이트를 만들려고했습니다.ASP.NET MVC 4 별도의 프로젝트가 작동하지 않는 영역 (보기를 찾을 수 없음)

자습서를 다음과 같이 시도했습니다. http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects (응용 프로그램이 가상 디렉터리에서 작동하지 않습니다 ... 저는 IIS를 사용합니다). 가상 디렉터리보다 나은 방법이 있기를 바랍니다.

은 그 때 나는이 튜토리얼 시도 : http://forums.asp.net/t/1483660.aspx/1 을하지만 지역 프로젝트의 *의 .csproj에는 "AreasManifestDir"요소가 없다 (그리고 "뷰 '색인'오류가 발생했습니다 또는 마스터가 없거나 더보기 엔진은 검색 지원하지 않습니다 위치 ")

ASP.NET에서 MVC 4를 지원합니까? 이 답변을 발견했기 때문에 나중에 제거 될 수 있습니다. What are the pros and cons of Areas implemented as single projects vs multiple projects in asp.net mvc

MVC4에 대한 방법을 찾지 못했습니다. 솔루션의

구조는 간단하다 : 관리자 프로젝트의

Solution 'MvcAreasMultiProject' 
    Areas [Directory] 
     Admin [Project] 
     Models 
     Views 
     Controllers 
     Routes.cs [Examples] 
    MvcAreasMultiProject [MainProject] 
     - References Admin project 
     M.V.C 

Routes.cs을 : 어떤 도움

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

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Admin_Default", 
      "Admin/{action}/{id}", 
      new { controller = "Admin", action = "Index", id = "" }, 
      new[] { "Admin.Controllers" } 
     ); 
    } 
} 
} 

감사합니다!

+0

http://elegantcode.com/2012/04/06/mvc-portable-areas/ – user960567

답변

25

RazorGenerator 패키지를 사용하여 면도기 뷰를 별도의 어셈블리에 포함 할 수 있습니다.

  • 이 빈 템플릿을 사용하여 새 ASP.NET MVC 4 응용 프로그램을 만듭니다 - (...> 확장 및 업데이트 도구)

    1. Razor Generator 비주얼 스튜디오 확장을 설치 : 다음은이 일을 할 수있는 단계입니다.
    2. AreasLibrary 프로젝트에 RazorGenerator.Mvc NuGet을 설치 (당신은 또한 면도기 뷰에있는 Intellisense를 얻을 수 있도록하는 ASP.NET MVC 프로젝트 템플릿을 사용할 수 있습니다) AreasLibrary라는 솔루션에 새 클래스 라이브러리 프로젝트를 추가합니다.
    3. AreasLibrary 프로젝트 내부 제어기 (~/Areas/Admin/Controllers/HomeController.cs) 추가

      public class HomeController: Controller 
      { 
          public ActionResult Index() 
          { 
           return View(); 
          } 
      } 
      
    4. 은 (~/Areas/Admin/Views/Home/Index.cshtml)에 대응하는 뷰를 추가 뷰의 속성

      @* Generator: MvcView *@ 
      
      @{ 
          Layout = null; 
      } 
      
      <!DOCTYPE html> 
      
      <html> 
      <head> 
          <meta name="viewport" content="width=device-width" /> 
          <title>View1</title> 
      </head> 
      <body> 
          <div> 
           Index view   
          </div> 
      </body> 
      </html> 
      
    5. Custom ToolRazorGenerator에 설정을 . 클래스 라이브러리 내부

    6. ~/Areas/AdminAreaRegistration.cs 추가 : 모든 것은이 남아

      public class AdminAreaRegistration : AreaRegistration 
      { 
          public override string AreaName { get { return "Admin"; } } 
      
          public override void RegisterArea(AreaRegistrationContext context) 
          { 
           context.MapRoute(
            "Admin_Default", 
            "Admin/{action}/{id}", 
            new { controller = "Home", action = "Index", id = "" } 
           ); 
          } 
      } 
      
    7. 메인 MVC 응용 프로그램에서 클래스 라이브러리를 참조하는 것입니다.

    참조 : 내 질문에 http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html

  • +1

    어쩌면 조금 다른 대답하지만, 최적의 솔루션.각 지역마다 다른 프로젝트를 만들고 싶습니다. 그래서 1-4 단계가 정확합니다. ** 모든 영역에서 하나의 프로젝트를 만들 필요는 없지만 모델 + 뷰 + 컨트롤러를 별도 프로젝트에 직접 추가하는 것이 더 간단합니다 **. 도움을 주셔서 감사합니다 - RazorGenerator를 사용하여 솔루션입니다. – Tomino

    +0

    아니요, 영역은 필요하지 않지만 모든 MVC 개발자는 영역을 이해하고이를보다 잘 구성하는 데 사용하는 방법 – xximjasonxx

    +0

    @ darin-dimitrov - 클래스 라이브러리 참조를 기본 MVC 애플리케이션에 추가하고 싶지 않다고 가정 해 보겠습니다. 위의 9 단계에서 설명한 대신 동적으로 "MVC 영역 클래스 라이브러리를" "발견"합니다. 이 일을 성취 할 수있는 방법이 있습니까? 나는 이것을 달성하기 위해 Assembly.LoadFrom ()을 사용해 보았지만보기를 찾을 수없는 것 같습니다. 감사! – Rockdocta