Найдено несколько типов, соответствующих контроллеру с именем «Home».(Две области, то же имя контроллера) - PullRequest
6 голосов
/ 22 января 2012

Это, вероятно, дубликат для многих, но очевидные ответы в них не решают мою проблему.

Я получаю:

Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter.

The request for 'Home' has found the following matching controllers:
App.Web.Controllers.HomeController
App.Web.Areas.Mobile.Controllers.HomeController

Я установил пространство имен по умолчанию для моего HomeController в Global.ascx.cs:

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

(проверено, что App.Web.Controllers.HomeController не является опечаткой).

А также зарегистрировал HomeController для мобильных устройств в MobileAreaRegistration:

public override void RegisterArea(AreaRegistrationContext context) {
    context.MapRoute(
        "Mobile_default",
        "Mobile/{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

Поэтому, почему я все еще вижу сообщение об ошибке? Я построил / очистил и побежал снова. Все тот же результат.

Вот как я регистрирую свои маршруты:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}

1 Ответ

14 голосов
/ 22 января 2012

При регистрации маршрута Global.asax по понятным причинам замените:

new string[] { "App.Web.Controllers.HomeController" } 

на:

new string[] { "App.Web.Controllers" } 

Это ограничение пространства имен, которое следует использовать там, а не конкретный тип.

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