Я обновил до 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
Должно ли добавление пространства имен исправить эту проблему?
Ваш первый маршрут предполагает, что существует класс /controllers/Admin/AdminController.cs
. Правильно ли это?
Кроме того, прочитайте this. Похоже, что вы предоставили область пространства имен, но они не находятся в той же структуре, которая требуется для ASP.NET MVC v2.
Структура вашего проекта должна выглядеть так:
Ваша структура выглядит так.
Было внесено изменение в MVC 2 Beta, где указание пространства имен (например, "MyNamespace.Web.Controllers" ) будет искать в этом пространстве имен и в его дочерних пространствах имен. Это отличается от поведения MVC 1, где указание пространства имен приведет к тому, что factory будет искать только это пространство имен.
Это изменение будет возвращено до RTM MVC 2. В частности, поведение RTM MVC 2 будет заключаться в том, что указание "MyNamespace.Web.Controllers" будет искать именно это пространство имен - так же, как в MVC 1, - и указывая "MyNamespace.Web.Controllers. *" (Обратите внимание на точку-звезду), будет искать это пространство имен и его дочерние элементы.