Несколько контроллеров с одним именем в ASP.NET MVC 2
При попытке запуска приложения ASP.NET MVC появляется следующая ошибка:
В запросе "Учетная запись" найдены следующие сопоставимые контроллеры: uqs.Controllers.Admin.AccountController
MvcApplication1.Controllers.AccountController
Я искал проект для MvcApplication1.Controllers.AccountController
, чтобы удалить его, но я не могу найти совпадение.
Я пытаюсь зарегистрировать маршрут для его исправления:
routes.MapRoute(
"LogAccount", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Account", action = "LogOn", id = "" },
new string[] { "uqs.Controllers.Admin" } // Parameter defaults
);
но это не решило его.
Было найдено несколько типов, которые соответствуют контроллер с именем "Учетная запись".
Как я могу решить эту проблему?
Ответы
Ответ 1
В вашем приложении не может быть более одного контроллера с именем Account
, даже в разных пространствах имен.
Вы должны разделить эти контроллеры на Area
(функция в ASP.NET MVC 2).
Если вы выполните поиск для AccountController
, вы найдете все контроллеры с именем Account
в своем приложении; и переместите их в разные Areas
, если вы хотите их обоих, или удалите их.
Ответ 2
Если вы реорганизовываете свой проект и меняете пространство имен и сборку по умолчанию с "MVCApplication1" на "uqs", вы можете получить 2 сборки в каталоге bin (новый и старый). Вы можете получить эту ошибку, потому что AccountController находится в обеих сборках.
Очистите каталог bin старого файла MVCApplication1.dll.
Ответ 3
Была эта же проблема. Убрал ящик, и мне было хорошо.
Ответ 4
Немного запутанная вариация проблемы (аналогичная тому, что она вызывает одно и то же сообщение об ошибке) может произойти даже с поставленными пространствами имен. 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". Это может произойдет, если маршрут, обслуживающий этот request ('{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 просто требует, чтобы вы были более явными, когда были потенциальные двусмысленности.
Ответ 5
AccountController
автоматически создается шаблоном ASP.NET MVC Visual Studio. Он расположен в Controllers\AccountController.cs
. Попробуйте найти его в проекте и удалить его.
Ответ 6
У меня была эта проблема...
Решено, удалив ссылку на проект в одном из файлов .csproj