2012-10-16 6 views
17

Próbowałem stworzyć prostą, sprawdzającą koncepcję strony ASP.NET MVC 4, korzystając z obszarów w osobnych projektach.ASP.NET MVC 4 Obszary w osobnych projektach nie działa (nie można znaleźć)

Próbowałem wykonać następujące samouczki: http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects (Aplikacja nie działa w katalogu wirtualnym ... Używam usług IIS). Mam nadzieję, że jest lepszy sposób niż wirtualne katalogi.

Potem próbowałem ten tutorial: http://forums.asp.net/t/1483660.aspx/1 Ale nie ma „AreasManifestDir” elementem projektu * .csproj obszaru (i mam błąd „«index»widoku lub jego mistrz nie został znaleziony lub nie wspiera silnik widok wyszukiwane lokalizacje ")

Czy w ASP.NET nadal istnieje wsparcie dla MVC 4? Ponieważ znalazłem tę odpowiedź, która może zostać usunięta w przyszłości: What are the pros and cons of Areas implemented as single projects vs multiple projects in asp.net mvc

Nie znalazłem żadnego poradnika dla MVC4.

Struktura rozwiązania jest prosta:

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

Routes.cs o projekcie Admin:

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

Dzięki za wszelką pomoc!

+0

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

Odpowiedz

25

Można użyć pakietu RazorGenerator, aby osadzić widoki maszynki Razor w oddzielnym zestawie. Oto kroki, aby to działało:

  1. zainstalować Razor Generator wizualna przedłużających Studio (Narzędzia -> Rozszerzenia i aktualizacji ...)
  2. Utwórz nową aplikację ASP.NET MVC 4 użyciu pustego szablonu.
  3. Dodaj nowy projekt biblioteki klas do roztworu zwanego AreasLibrary (można również użyć szablonu projektu ASP.NET MVC w celu uzyskania Intellisense w widokach Razor)
  4. Zainstalować RazorGenerator.Mvc Nuget do projektu AreasLibrary.
  5. dodaniu kontrolera wewnątrz projektu AreasLibrary (~/Areas/Admin/Controllers/HomeController.cs):

    public class HomeController: Controller 
    { 
        public ActionResult Index() 
        { 
         return View(); 
        } 
    } 
    
  6. dodać odpowiedni rzut (~/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> 
    
  7. W właściwości widoku uzbrojonym Custom Tool do RazorGenerator .

  8. Wewnątrz biblioteki klas dodaj ~/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 = "" } 
         ); 
        } 
    } 
    
  9. Pozostaje to, aby odwoływać się do biblioteki klas w głównej aplikacji MVC.

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

+1

Może trochę inna odpowiedź na moje pytanie, ale dobrym rozwiązaniem.Chciałbym stworzyć inny projekt dla każdego obszaru. Zatem kroki 1-4 są poprawne. ** Nie jest konieczne tworzenie jednego projektu ze wszystkimi obszarami, ale prostsze jest dodawanie modeli + widoków + kontrolerów bezpośrednio do oddzielnych projektów **. Dzięki za pomoc - rozwiązaniem jest RazorGenerator. – Tomino

+0

Nie, obszary nie są konieczne, ale każdy deweloper MVC powinien rozumieć Obszary i jak z nich korzystać, aby lepiej organizować rzeczy. – xximjasonxx

+0

@ darin-dimitrov - Załóżmy, że nie chcę dodawać odniesienia do biblioteki klas do głównej aplikacji MVC, ponieważ " opisałem to w kroku 9 powyżej, ale zamiast tego dynamicznie "odkryłem" moje biblioteki klas obszarów MVC. Czy jest jakiś sposób, aby to osiągnąć? Próbowałem użyć Assembly.LoadFrom (), aby to osiągnąć, ale nigdy nie uda mi się znaleźć tego widoku. Dzięki! – Rockdocta

Powiązane problemy