Неоднозначная ошибка контроллера, обновлена ​​до MVC 2 - PullRequest
2 голосов
/ 28 января 2010

Я обновил до MVC 2, обновил все мои сборки (также скопировал на локальный).

Я изменил свои маршруты на это:

routes.MapRoute(
                "Admin",
                "admin/{controller}/{action}/{id}",
                new { controller = "Admin", action = "index", id = ""},
                new[] { "MyNamespace.Web.Controllers.Admin" } // namespace
            );


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

Мои контроллеры выглядят так:

/controllers/admin/ProductController.cs
/controllers/ProductController.cs

Я все еще получаю ошибку:

he controller name 'Product' is ambiguous between the following types:
MyNamespace.Web.Controllers.Admin.ProductController
MyNamespace.Web.Controllers.ProductController

Должно ли добавление пространства имен решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 28 января 2010

Ваш первый маршрут предполагает наличие класса /controllers/Admin/AdminController.cs. Это правильно?

Также прочитайте this . Похоже, вы предоставили область пространства имен, но они не находятся в той же структуре, которая требуется для ASP.NET MVC v2.

Структура вашего проекта должна выглядеть следующим образом:

  • Область
    • Администратор
      • ProductController
  • Контроллеры
    • ProductController

Ваша структура выглядит следующим образом.

  • Контроллеры
    • Администратор
      • ProductController
    • ProductController
1 голос
/ 30 января 2010

Произошло изменение, внесенное в бета-версию MVC 2, где указание пространства имен (например, "MyNamespace.Web.Controllers") будет выполнять поиск в этом пространстве имен и его дочерних пространствах имен . Это отличается от поведения MVC 1, когда указание пространства имен заставит фабрику искать только это пространство имен.

Это изменение будет отменено до MVC 2 RTM. В частности, поведение RTM MVC 2 будет таким, что указание «MyNamespace.Web.Controllers» будет искать только это пространство имен - так же, как в MVC 1 - и указание «MyNamespace.Web.Controllers. *» (Обратите внимание, точка-звезда) будет искать это пространство имен плюс его дети.

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