Подтвердить что ты не робот

Несколько контроллеров с одним именем в 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
 );

но это не решило его.

Было найдено несколько типов, которые соответствуют контроллер с именем "Учетная запись".

Как я могу решить эту проблему?

4b9b3361

Ответ 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