Неоднозначные имена контроллеров в ASP.NET MVC - PullRequest
4 голосов
/ 16 января 2009

Я пытался внедрить демо Phil's Areas в мой проект http://haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx. Я добавил структуру Areas / Blog в свой существующий проект MVC, и я получил следующую ошибку в моем проекте.

Имя контроллера «Home» неоднозначно для следующих типов: WebMVC.Controllers.HomeController WebMVC.Areas.Blogs.Controllers.HomeController

так выглядит мой global.asax.

public static void RegisterRoutes (маршруты RouteCollection) { routes.IgnoreRoute ( "{ресурс} .axd / {* PathInfo}");

        routes.MapAreas("{controller}/{action}/{id}",
            "WebMVC.Areas.Blogs",
            new[] { "Blogs", "Forums" });

        routes.MapRootArea("{controller}/{action}/{id}",
            "WebMVC",
            new { controller = "Home", action = "Index", id = "" });

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

    }

    protected void Application_Start()
    {
        String assemblyName = Assembly.GetExecutingAssembly().CodeBase;
        String path = new Uri(assemblyName).LocalPath;
        Directory.SetCurrentDirectory(Path.GetDirectoryName(path));
        ViewEngines.Engines.Clear();
        ViewEngines.Engines.Add(new AreaViewEngine());
                  RegisterRoutes(RouteTable.Routes);
       // RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);

    }

Если я удаляю / Areas / Blogs из маршрутов. MapAreas, он смотрит на Индекс корня.

Ответы [ 3 ]

2 голосов
/ 08 февраля 2010

В ASP.NET MVC 2.0 вы можете включать пространства имен для родительских контроллеров проектов при регистрации маршрутов в родительской области.

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

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

1 голос
/ 17 января 2009

Вместо WebMVC.Areas.Blogs и WebMVC используйте WebMVC.Areas.Blogs и WebMVC.Areas.OtherAreaName. Думайте о названии области как о корне пространства имен, а не как об абсолютном пространстве имен.

0 голосов
/ 17 марта 2011

Вы можете назначить приоритеты между несколькими контроллерами с одинаковыми именами в маршрутизации следующим образом

Например, у меня есть один контроллер с именем HomeController в Areas/Admin/HomeController и еще один в корне /controller/HomeController
поэтому я определяю приоритет моего корневого каталога следующим образом:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", // Parameter defaults
    id = UrlParameter.Optional },
    new [] { "MyAppName.Controllers" } // Prioritized namespace which tells the current asp.net mvc pipeline to route for root controller not in areas.
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...