В моем проекте ASP.NET MVC 3 возникает следующая ошибка:
Было обнаружено несколько типов, соответствующих контроллеру с именем «Home». Это может произойти, если маршрут, обслуживающий этот запрос ('Home / {action} / {id}'), не указывает пространства имен для поиска контроллера, который соответствует запросу. Если это так, зарегистрируйте этот маршрут, вызвав перегрузку метода MapRoute, который принимает параметр namespaces.
Запрос на «Домашнюю страницу» обнаружил следующие подходящие контроллеры: MyCompany.MyProject.WebMvc.Controllers.HomeController MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController
У меня есть HomeController в моей папке контроллера по умолчанию с именем класса MyCompany.MyProject.WebMvc.Controllers.HomeController.
Мой метод RegisterRoutes в моем global.asax выглядит так:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
Затем у меня есть область под названием Company, с HomeController в папке контроллера по умолчанию для этой области с именем класса MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController.
Метод RegisterArea в файле CompanyAreaRegistration выглядит так:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Company_default",
"Company/{controller}/{action}/{id}",
new { area = "Company", action = "Index", id = UrlParameter.Optional }
);
}
Все это приводит к ошибке, которую я выделил в начале этого поста. Я изо всех сил пытаюсь собрать решение из различных других сообщений, но НЕ УДАЧИ .
Возможно ли иметь HomeController в папке контроллеров по умолчанию, а затем по одному в КАЖДОЙ области? Если да, нужно ли мне вносить (при условии, что я это сделаю) изменения в мой файл конфигурации, чтобы эта работа работала?
Любая помощь приветствуется!
Ответы:
В сообщении об ошибке содержится рекомендуемое решение: «В этом случае зарегистрируйте этот маршрут, вызвав перегрузку метода MapRoute, который принимает параметр namespaces».
Это заставит http: // server / перейти к действию Index вашего HomeController, которое, я думаю, вам и нужно. http: // server / company / home перейдет к действию Index HomeController области Company, как определено в регистрации области.
источник
namespaces
параметр представляет собой массив строк, поэтому вы должны иметь возможность передавать любое число, добавляя в массив:new string[] { "MyCompany.MyProject.WebMvc.Controllers", "My.Second.Namespace", "My.Third.Namespace", "Namespaces.Etc" }
MyProject.Controllers
однако сделал.MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController
классе выполняется. Но вид появляется старый.Это подход asp.net mvc4:
источник
Я переименовал пространства имен, поэтому я удаляю только папки bin и obj и перестраиваю , снова работаю.
источник
Еще одна вероятная причина этой проблемы может быть найдена ниже:
Было обнаружено несколько типов, соответствующих контроллеру с именем Home
источник
использовать это
источник
Используйте только название проекта:
источник
Если вы используете RazorGenerator, простого указания
namespaces
параметра может быть недостаточно.Мне нужно решить, добавив оператор, отмеченный ниже
Global.asax.cs
:источник
Как упоминал Крис Москини, параметра namespaces может быть недостаточно, если у вас есть две области с одинаковым именем контроллера с разными пространствами имен, а маршрут по умолчанию без области вернет ошибку сервера 500.
Лучше всего переопределить обработчик маршрута по умолчанию и добавить эту строку:
источник
У меня возникла эта проблема после того, как я добавил ссылку на другой проект с такими же маршрутами, и проблема не исчезла после того, как я удалил ссылку.
Решено путем удаления DLL-файла этой добавленной ссылки из папки bin и повторной сборки.
источник
Как и у многих других, у меня возникла эта проблема после создания нового проекта шаблона MVC из меню VS2017, при создании проекта я получал сообщение об ошибке op. Затем я использовал ответ https://stackoverflow.com/a/15651619/2417292, опубликованный ранее в этой теме от cooloverride для проектов mvc4. Это все еще не устранило мою проблему, поэтому я переименовал свою папку Home view и файл HomeController в папку просмотра Company / и файл контроллера CompanyController. Затем это сработало для меня, а не как исправление, а как обходной путь, если вы не застряли на маршруте Home / Index, моя другая проблема заключалась в том, что я не мог найти ссылку, вызывающую ошибку, и из-за того, что моя платформа разработки была Azure WebApplication против полная виртуальная машина с полной файловой системой и настройками IIS, с которыми можно возиться.
источник
У меня была такая же проблема, и я обнаружил, что более старая версия создавала скомпилированные файлы в папке «bin».
Как только я удалил их, ошибка исчезла.
источник