345 Stimmen

Es wurden mehrere Typen gefunden, die mit dem Controller namens 'Home' übereinstimmen

Ich habe derzeit zwei voneinander unabhängige MVC3-Projekte online gehostet.

Die eine funktioniert einwandfrei, die andere nicht und zeigt mir die Fehlermeldung an:

Es wurden mehrere Typen gefunden, die dem Controller mit dem Namen "Home" entsprechen. Dies kann passieren wenn die Route die diese Anfrage bedient ('{controller}/{action}/{id}') keine Namespaces für die Suche nach einem Controller zu suchen, der der Anfrage entspricht.

Wenn dies der Fall ist, registrieren Sie diese Route, indem Sie eine Überladung der Methode 'MapRoute' aufrufen aufruft, die einen Parameter 'Namespaces' enthält.

Mein Hoster gibt mir FTP-Zugang, und in diesem Ordner habe ich zwei weitere Ordner, einen für jede meiner Anwendungen.

ftpFolderA2/foo.com

ftpFolderA2/bar.com

foo.com funktioniert einwandfrei. Ich veröffentliche meine Anwendung in meinem lokalen Dateisystem und übertrage dann die Inhalte per FTP, und es funktioniert.

Wenn ich bar.com hochlade und auszuführen versuche, tritt das oben beschriebene Problem auf und hindert mich daran, meine Website zu nutzen. Solange foo.com noch funktioniert .

Sucht bar.com von Controllern aus ÜBERALL innerhalb von ftpFolderA2 und findet deshalb einen anderen HomeController ? Wie kann ich ihn dazu bringen, nur im Ordner "Controller" zu suchen, wie es eigentlich sein sollte?

Fakten:

  1. Nicht genutzte Bereiche. Dies sind zwei völlig unabhängige Projekte. Ich lege jedes veröffentlichte Projekt in den jeweiligen Ordner. Nichts Ausgefallenes.
  2. Jedes Projekt hat nur 1 HomeController.

Kann jemand bestätigen, dass dies das Problem ist?

32voto

Dr TJ Punkte 3084

Was andere gesagt haben, ist richtig, aber für diejenigen, die immer noch das gleiche Problem haben:
In meinem Fall passierte es, weil ich ein anderes Projekt kopiert und in etwas anderes umbenannt habe BUT vorherige Ausgabedateien in bin Ordner waren noch da... Und leider hat das Drücken von Build -> Clean Solution nach der Umbenennung des Projekts und seiner Namespaces entfernt nicht sie... also Löschen von Sie haben mein Problem manuell gelöst!

24voto

Amir Shrestha Punkte 461

Prüfen Sie die bin Ordner, ob es eine andere DLL-Datei gibt, die möglicherweise einen Konflikt mit der homeController-Klasse verursacht.

13voto

Ben Foster Punkte 33445

Eine andere Lösung besteht darin, einen Standard-Namensraum bei ControllerBuilder zu registrieren. Da wir viele Routen in unserer Hauptanwendung und nur eine einzige generische Route in unseren Bereichen hatten (wo wir bereits einen Namespace angegeben hatten), war dies die einfachste Lösung:

ControllerBuilder.Current
     .DefaultNamespaces.Add("YourApp.Controllers");

7voto

StanK Punkte 4690

Auch wenn Sie keine Bereiche verwenden, können Sie in Ihrer RouteMap angeben, welcher Namensraum verwendet werden soll

routes.MapRoute(
    "Default",
    "{controller}/{action}",
    new { controller = "Home", action = "Index" },
    new[] { "NameSpace.OfYour.Controllers" }
);

Aber es klingt, als läge das eigentliche Problem in der Art und Weise, wie Ihre beiden Anwendungen im IIS eingerichtet sind

6voto

Xtremexploit Punkte 319

Wenn Sie es automatisch auflösen wollen, können Sie die Anwendung assambly verwenden. fügen Sie einfach den folgenden Code ein:

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { string.Format("{0}.Controllers", BuildManager.GetGlobalAsaxType().BaseType.Assembly.GetName().Name) }
        );

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X