Одно и то же имя контроллера в разных областях - PullRequest
8 голосов
/ 05 февраля 2012

В приложении ASP.NET MVC 3 с областями (см. Схему ниже). Каталог «Контроллеры» из корня удален.

Когда я делаю это:

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

Я получаю эту ошибку: Обнаружено несколько типов, соответствующих контроллеру с именем «Home». Это может произойти, если маршрут, обслуживающий этот запрос ('{controller} / {action} / {id}') не указывает пространства имен для поиска контроллера, соответствующего запросу. Если это так, зарегистрируйте этот маршрут, вызвав перегрузку MapRoute. метод, который принимает параметр namespaces. Запрос на 'Home' нашел следующие подходящие контроллеры: MyProject.Areas.Administration.Controllers.HomeController MyProject.Areas.BackEnd.Controllers.HomeController MyProject.Areas.FrontEnd.Controllers.HomeController

Когда я делаю это:

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

Я получаю эту ошибку:

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 Чтобы запустить определенный контроллер в областях, я попробовал это:

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

1 Ответ

14 голосов
/ 05 февраля 2012

Попробуйте следующее:

~/Global.asax.cs * * 1004

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

Теперь, когда вы запрашиваете /Administration/Home/Index, будет вызвано действие Index HomeController в области Administration, и оно будет искать представление ~/Areas/Administration/Views/Home/Index.cshtml. Убедитесь, что этот вид присутствует в этом месте. На вашей картинке вы, похоже, не указали каталог Home - ~/Areas/Administration/Views/Index.cshtml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...