Uruchamiam następujący błąd w moim projekcie ASP.NET MVC 3:
Znaleziono wiele typów pasujących do kontrolera o nazwie „Home”. Może się tak zdarzyć, jeśli trasa obsługująca to żądanie („Home / {action} / {id}”) nie określa przestrzeni nazw do wyszukiwania kontrolera, który pasuje do żądania. W takim przypadku zarejestruj tę trasę, wywołując przeciążenie metody „MapRoute”, która przyjmuje parametr „namespaces”.
Żądanie „Strona główna” znalazło następujące pasujące kontrolery: MyCompany.MyProject.WebMvc.Controllers.HomeController MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController
Mam HomeController w moim domyślnym folderze kontrolera z nazwą klasy MyCompany.MyProject.WebMvc.Controllers.HomeController.
Moja metoda RegisterRoutes w moim global.asax wygląda następująco:
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
);
}
Mam wtedy obszar o nazwie Firma z HomeController w domyślnym folderze kontrolera dla tego obszaru, z nazwą klasy MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController.
Metoda RegisterArea w pliku CompanyAreaRegistration wygląda następująco:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Company_default",
"Company/{controller}/{action}/{id}",
new { area = "Company", action = "Index", id = UrlParameter.Optional }
);
}
To wszystko prowadzi do błędu, który podkreśliłem na początku tego postu. Próbuję złożyć rozwiązanie z różnych innych postów, ale BEZ SZCZĘŚCIA .
Czy można mieć HomeController w domyślnym folderze kontrolerów, a następnie jeden w KAŻDYM obszarze? Jeśli tak, czy muszę wprowadzić (zakładając, że to zrobię) zmiany w moim pliku konfiguracyjnym, aby to zadziałało?
Każda pomoc byłaby bardzo mile widziana!
źródło
Odpowiedzi:
Komunikat o błędzie zawiera zalecane rozwiązanie: „W takim przypadku zarejestruj tę trasę, wywołując przeciążenie metody„ MapRoute ”, która przyjmuje parametr„ przestrzenie nazw ”.”
Spowoduje to, że http: // server / przejdzie do akcji indeksu HomeControllera, która jest, jak sądzę, tym, czego chcesz. Adres http: // server / company / home przejdzie do akcji Indeks kontrolera HomeControllera obszaru firmy, zgodnie z definicją w rejestracji obszaru.
źródło
namespaces
parametr jest tablicą łańcuchową, więc powinieneś być w stanie przekazać dowolną liczbę, dodając do tablicy:new string[] { "MyCompany.MyProject.WebMvc.Controllers", "My.Second.Namespace", "My.Third.Namespace", "Namespaces.Etc" }
MyProject.Controllers
jednak.MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController
klasie jest wykonywany. Ale wydaje się, że widok jest stary.To jest podejście asp.net mvc4:
źródło
Miałem przemianowany przestrzeni nazw, tak, ja tylko usuwać de foldery bin i obj i odbudować , prace ponownie.
źródło
Inną prawdopodobną przyczynę tego problemu można znaleźć poniżej:
Znaleziono wiele typów pasujących do kontrolera o nazwie „Strona główna”
źródło
Użyj tego
źródło
Użyj tylko nazwy projektu:
źródło
Jeśli używasz RazorGenerator, samo podanie
namespaces
parametru może nie wystarczyć.Muszę rozwiązać dodając oświadczenie zaznaczone poniżej
Global.asax.cs
:źródło
Jak wspomniał Chris Moschini, parametr namespaces może nie wystarczyć, jeśli masz dwa obszary o tej samej nazwie kontrolera z różnymi przestrzeniami nazw, a domyślna trasa none area zwróci błąd serwera 500.
Najlepiej jest zastąpić domyślną procedurę obsługi trasy i dodać tę linię:
źródło
Miałem ten problem po dodaniu odwołania do innego projektu, który miał te same trasy, a problem nadal występował po usunięciu odniesienia.
Rozwiązanie rozwiązane przez usunięcie pliku .dll tego dodanego odniesienia z folderu bin i ponowne kompilowanie.
źródło
Podobnie jak wielu innych, miałem ten problem po utworzeniu nowego projektu szablonu MVC z menu VS2017, podczas budowania projektu otrzymywałem komunikat o błędzie op. Następnie skorzystałem z odpowiedzi https://stackoverflow.com/a/15651619/2417292 opublikowanej wcześniej w tym wątku przez cooloverride dla projektów mvc4. To nadal nie rozwiązało mojego problemu, więc zmieniłem nazwę mojego folderu widoku głównego i pliku HomeController na folder widoku Company / i plik kontrolera CompanyController. To wtedy zadziałało dla mnie, nie poprawka na słowo, ale obejście, jeśli nie utknąłeś na trasie Strona główna / Indeks. Moim innym problemem było to, że nie mogłem znaleźć odniesienia powodującego błąd i ponieważ moja platforma deweloperska to Azure WebApplication vs pełna maszyna wirtualna z pełnym systemem plików i ustawieniami usług IIS, z którymi można zadzierać.
źródło
Miałem ten sam problem i stwierdziłem, że starsza wersja utworzyła skompilowane pliki w folderze „bin”.
Po ich usunięciu błąd zniknął.
źródło