Несколько контроллеров с одним именем в 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
);
но это не решить.
найдено несколько типов, которые соответствуют этот контроллер с именем "учетная запись".
как я могу решить эту проблему?
6 ответов
вы не можете иметь более одного контроллера по имени Account
в вашем приложении, даже в разных пространствах имен.
вы должны иметь эти контроллеры разделены на Area
(функция в ASP.NET MVC 2).
если вы проводите поиск для AccountController
вы найдете все контроллеры по имени Account
в вашем приложении; и переместить их в другой Areas
если вы хотите, или удалить.
Если вы рефакторируете свой проект и измените пространство имен и сборку по умолчанию с "MVCApplication1" на "uqs", вы можете получить 2 сборки в каталоге bin (новую и старую). Вы можете получить эту ошибку, потому что AccountController в обоих сборках.
очистите каталог bin от старого MVCApplication1.файл DLL.
немного запутанный вариант проблемы (похожий на то, что он вызывает одно и то же сообщение об ошибке) может произойти даже с пространствами имен. 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
РР.Контроллеры.AdminController
РР.StoreControllers.AdminController
но постойте! Разве я не указал пространство имен контроллера.... ? Что происходит.... ?
Ну, оказалось, что пространство имен контроллера администратора моей области по умолчанию было RR_MVC.Controller
вместо Rolling_Razor_MVC.Controller.Main
.
по какой-то причине в MVC 2 это не дало проблемы, но в MVC 3 это так. Я думаю, MVC 3 просто требует, чтобы Вы были более явными, когда есть потенциальные двусмысленности.
AccountController
автоматически генерируется ASP.NET шаблон MVC Visual Studio. Он расположен в Controllers\AccountController.cs
. Попробуйте найти его в проекте и удалить.