2012-02-04 12 views
5

W aplikacji ASP.NET MVC 3 z obszarami (patrz schemat poniżej). Katalog "Kontrolery" z katalogu głównego został usunięty.Ten sam numer kontrolny w różnych obszarach

Kiedy to zrobić:

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

otrzymuję ten błąd: Wiele typów stwierdzono, że pasuje do kontrolera o nazwie 'Home'. Może się to zdarzyć, jeśli trasa obsługująca to żądanie ("{kontroler}/{akcja}/{id}") nie określa przestrzeni nazw do wyszukiwania kontrolera pasującego do żądania. W takim przypadku zarejestruj tę trasę, wywołując przeciążenie metody "MapRoute" , która pobiera parametr "namespace". Żądanie 'Home' znalazła następujące kontrolery dopasowania: MyProject.Areas.Administration.Controllers.HomeController MyProject.Areas.BackEnd.Controllers.HomeController MyProject.Areas.FrontEnd.Controllers.HomeController

Kiedy I to zrobić:

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

uzyskać tis błąd:

The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched: 
~/Views/Home/Index.aspx 
~/Views/Home/Index.ascx 
~/Views/Shared/Index.aspx 
~/Views/Shared/Index.ascx 
~/Views/Home/Index.cshtml 
~/Views/Home/Index.vbhtml 
~/Views/Shared/Index.cshtml 
~/Views/Shared/Index.vbhtml 


---- Areas 
     | 
     |---- Administration 
     |  |--- Controllers 
     |  |  |---- HomeController 
     |  |--- Views 
     |    |--- Index 
     |---- FrontEnd 
     |  |--- Controllers 
     |  |  |---- HomeController 
     |  |--- Views 
     |    |--- Index 
     |---- BackEnd 
       |--- Controllers 
       |  |---- HomeController 
       |--- Views 
         |--- Index 

Update1 Aby rozpocząć do konkretnego kontrolera w obszarach, próbowałem to:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     new[] { "MyProject.Areas.BackEnd.Controllers" } 
    ); 
} 

Odpowiedz

11

Spróbuj wykonać następujące czynności:

~/Global.asax.cs:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

~/Areas/Administration/AdministrationAreaRegistration.cs

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Administration_default", 
     "Administration/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional }, 
     new[] { "MyProject.Areas.Administration.Controllers" } 
    ); 
} 

~/Areas/FrontEnd/FrontEndAreaRegistration.cs:

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "FrontEnd_default", 
     "FrontEnd/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional }, 
     new[] { "MyProject.Areas.FrontEnd.Controllers" } 
    ); 
} 

Teraz, gdy wniosek /Administration/Home/Index, akcja Index z HomeController w obszarze Administration zostanie wywołany i będzie wyglądać na widok ~/Areas/Administration/Views/Home/Index.cshtml. Upewnij się, że ten widok jest obecny w tej lokalizacji. Na twoim zdjęciu zdaje się, że pominąłeś katalog Home - ~/Areas/Administration/Views/Index.cshtml.

+0

Wygląda dobrze. Jeszcze jedno. Kiedy uderzę w F5 w VS, domyślnie chcę przejść do obszaru Backend w Home/Index –

+0

@ Kris-I, w tym przypadku albo zmodyfikuj rejestrację trasy w okolicy, albo przejdź do właściwości twojego projektu i na karcie może ustawić stronę startową, w której można zdefiniować "Administracja/Dom/Indeks". W ten sposób po uruchomieniu aplikacja automatycznie przejdzie do tego kontrolera. –

+0

Zmień stronę startową ok, ale po rejestracji trasy spójrz na update1. Dzięki –

Powiązane problemy