Неоднозначная ошибка контроллера, обновлена до MVC 2

2

Я обновил до 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

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

Теги:
asp.net-mvc
asp.net-mvc-2

2 ответа

3
Лучший ответ

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

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

Структура вашего проекта должна выглядеть так:

  • Районы
    • Администратор
      • ProductController
  • Контроллеры
    • ProductController

Ваша структура выглядит так.

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню