Слегка сбивающий с толку вариант проблемы (похожий в том смысле, что он вызывает одно и то же сообщение об ошибке) может возникнуть даже с предоставленными пространствами имен. MVC 3 Я думаю, что немного сложнее, чем MVC 2 на этом фронте.
Краткий ответ:
Убедитесь, что пространство имен вашего контроллера фактически является пространством имен, указанным в вызове MapRoute
!!
Длинный ответ :
У меня есть 3 области: default ("")
/ Facebook
/ Store
, и у каждой из них AdminController
У меня маршрут отображается следующим образом (для моей области по умолчанию):
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Gateway", action = "Index", id = UrlParameter.Optional },
new string[] { "RR.Controllers.Main" }
);
Запрос к / admin дал следующую ошибку:
Найдено несколько типов, соответствующих
контроллер с именем «admin». Это может
произойдет, если маршрут, который обслуживает этот
запрос ('{controller} / {action} / {id}')
не указывает пространства имен ...
Запрос 'admin' нашел
следующие соответствующие контроллеры:
RR.FacebookControllers.AdminController
RR.Controllers.AdminController
RR.StoreControllers.AdminController
Но подожди минутку! Разве я не указал пространство имен контроллера ....? Что происходит ....?
Оказалось, что пространство имен контроллера моей области по умолчанию было RR_MVC.Controller
вместо Rolling_Razor_MVC.Controller.Main
.
По какой-то причине в MVC 2 это не вызывало проблем, но в MVC 3 это дает. Я думаю, что MVC 3 просто требует от вас большей ясности, когда есть потенциальные неоднозначности.