2010-01-28 2 views
2

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

Если добавление пространства имен исправить вопрос?

ответ

3

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

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

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

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

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

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

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

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

Смежные вопросы