Несколько контроллеров с одним именем в 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. Попробуйте найти его в проекте и удалить.


У меня была эта проблема...

решено путем удаления ссылки на проект в одном из .файлы csproj