2012-10-16 17 views
17

Ayrı projelerdeki alanları kullanarak basit bir kavram kanıtı olan ASP.NET MVC 4 web sitesi oluşturmaya çalıştım.ASP.NET MVC 4 Çalışılmamış ayrı projelerde alanlar (görünüm bulunamadı)

Eğitmenleri izlemeyi denedim: http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects (Uygulama sanal dizinde çalışmıyor ... IIS kullanıyorum). Umarım sanal dizinlerden daha iyi bir yol vardır.

Sonra bu öğretici çalıştı: http://forums.asp.net/t/1483660.aspx/1 Ama alan projenin * .csproj hiçbir "AreasManifestDir" unsuru bulunması (ve "görünümün 'Index' hata var ya da usta bulunamadı veya hiçbir görünüm motoru aranır destekler konumlar ")

MVC 4 için ASP.NET'te hala destek var mı? Bu yanıtı gelecekte kaldırılabileceğinden dolayı: What are the pros and cons of Areas implemented as single projects vs multiple projects in asp.net mvc

MVC4 için nasıl bir yöntem bulamadım. çözümün

Yapısı basit: Yönetici projesinin

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

Routes.cs: Herhangi bir yardım için

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" } 
     ); 
    } 
} 
} 

teşekkürler!

+0

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

cevap

25

Razor görünümlerinizi ayrı bir gruba yerleştirmek için RazorGenerator paketini kullanabilirsiniz.

  • boş şablonu kullanarak yeni bir ASP.NET MVC 4 uygulaması oluşturun - (...> Uzantıları ve Güncellemeler Araçlar)

    1. Razor Generator Visual Studio eklentisi yükleyin: İşte bu işi yapmak için adımlardır.
    2. AreasLibrary projeye RazorGenerator.Mvc Nuget yükleyin (ayrıca Ustura görünümlerinde IntelliSense almak için bir ASP.NET MVC proje şablonunu kullanabilirsiniz) AreasLibrary denilen çözümü için yeni bir sınıf kitaplığı projesi ekleyin.
    3. AreasLibrary proje içinde bir kontrolör (~/Areas/Admin/Controllers/HomeController.cs) ekleyin:

      public class HomeController: Controller 
      { 
          public ActionResult Index() 
          { 
           return View(); 
          } 
      } 
      
    4. (~/Areas/Admin/Views/Home/Index.cshtml) karşılık gelen bir görünüm ekleme: bakış özelliklerinde

      @* 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 ayarlanmış . sınıf kitaplığında İçinde

    6. bir ~/Areas/AdminAreaRegistration.cs ekleyin: Bütün bu geriye

      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. ana MVC uygulamada sınıf kitaplığı başvuru etmektir.

    Referans: Sorumun http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html

  • +1

    Belki biraz farklı cevap, ancak doğru çözüm.Her alan için farklı bir proje yapmak istiyorum. Yani 1-4 arası adımlar doğru. ** Tüm alanlarla tek bir proje oluşturmak gerekli değildir, ancak modeller + görünüm + denetleyicileri doğrudan ayrı projelere eklemek ** için daha kolaydır. Yardımınız için teşekkürler - RazorGenerator kullanarak çözümdür. – Tomino

    +0

    Hayır, alanlar gerekli değildir, ancak herhangi bir MVC dev alanı ve bunları daha iyi organize etmek için bunları nasıl kullanacaklarını anlamalıdır – xximjasonxx

    +0

    @ darin-dimitrov - Sanırım sınıf kitaplığı başvurusunu ana MVC uygulamasına eklemek istemedim ve yukarıda adım 9'da tarif edilmiştir ancak bunun yerine MVC alan sınıfı kütüphanelerimi dinamik olarak "keşfet". Bunu başarmanın bir yolu var mı? Bunu gerçekleştirmek için Assembly.LoadFrom () kullanmayı denedim, ancak asla görünümü bulamadım. Teşekkürler! – Rockdocta