2010-04-13 3 views
12

ich die folgende Fehlermeldung, wenn ich meine ASP.NET MVC-Anwendung auszuführen:mehr Steuerungen mit einem Namen in ASP.NET MVC 2

Der Antrag auf ‚Konto‘ gefunden hat folgenden passenden Controller: uqs.Controllers.Admin.AccountController MvcApplication1.Controllers.AccountController

ich das Projekt für MvcApplication1.Controllers.AccountController gesucht, sie zu entfernen, aber ich kann keine Übereinstimmung finden.

Ich versuche, registriert eine Route zur Behebung des Fehlers

routes.MapRoute(
    "LogAccount", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Account", action = "LogOn", id = "" }, 
    new string[] { "uqs.Controllers.Admin" } // Parameter defaults 
); 

aber, dass es nicht lösen war.

Es wurden mehrere Typen gefunden, die mit dem Controller namens "Account" übereinstimmen.

Wie kann ich dieses Problem beheben?

Antwort

10

Sie können nicht mehr als einen Controller mit der Bezeichnung Account in Ihrer Anwendung haben, auch nicht in verschiedenen Namespaces.

Sie müssen diese Controller von Area (eine Funktion in ASP.NET MVC 2) aufgeteilt haben.

Wenn Sie eine Suche nach AccountController durchführen, finden Sie alle Controller mit der Bezeichnung Account in Ihrer Anwendung; und verschiebe sie in verschiedene Areas, wenn Sie beide wollen, oder löschen Sie eine.

+5

Sind Sie sicher? Ich habe zwei Controller in verschiedenen Namespaces, von denen der eine erbt, und ich verwende keine Areas. Das Festlegen des Namespace in der MapRoute (genau wie lovjii oben) hat genau dieselbe Fehlermeldung behoben. Ist der Unterschied, den meine Controller voneinander erben? –

0

AccountController wird automatisch von der Vorlage ASP.NET MVC Visual Studio generiert. Es befindet sich in Controllers\AccountController.cs. Versuchen Sie im Projekt danach zu suchen und löschen Sie es.

+0

Sorry, vielleicht kann ich mein Problem nicht erklären. aber ich weiß, wo AccountController gefunden wurde. aber ich habe keinen Namensraum mit dem Namen MvcApplication1.Controllers.AccountController, ich benenne ihn in uqs.Controllers.Admin um. und versuchen, meine Web-App zu starten. – loviji

60

Wenn Sie Ihr Projekt umgestalten und den Standard-Namespace und die Assembly von "MVCApplication1" in "uqs" ändern, können Sie zwei Assemblys in Ihrem bin-Verzeichnis (das neue und das alte) haben. Sie können diesen Fehler erhalten, da sich der AccountController in beiden Assemblys befindet.

Reinigen Sie Ihr bin-Verzeichnis der alten MVCApplication1.dll.

+7

Prost Mann, ich hatte dieses Problem zuvor und endete damit, ein neues Projekt zu erstellen, da ich nicht herausfinden konnte, was das Problem war - ich dachte dumm, dass eine saubere den bin Ordner löschen würde, nicht so, wenn ich mich geändert habe der Assemblyname eh ?? !! – jcvandan

+6

Dies ist die richtige Antwort - sollte als solche akzeptiert werden. – LiverpoolsNumber9

+2

Ich habe mein Projekt umbenannt und hatte die alte DLL-Datei noch in meinem bin-Ordner - das behebt mein Problem. Vielen Dank! – dadwithkids

3

Eine leicht verwirrende Variante des Problems (ähnlich, dass es die gleiche Fehlermeldung verursacht) kann auch bei bereitgestellten Namespaces auftreten. MVC 3 Ich denke, ist ein bisschen wählerischer als MVC 2 auf dieser Front.


Kurze Antwort:

der Namensraum des Controllers Stellen Sie sicher, in der Tat ist der Namespace in dem MapRoute Aufruf angegeben !!


Lange Antwort:

Ich habe 3 Bereiche: default ("")/Facebook/Store und sie haben jeweils AdminController

Ich habe die Strecke wie dieses abgebildet (für meinen Standard-Bereich):

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Gateway", action = "Index", id = UrlParameter.Optional }, 
    new string[] { "RR.Controllers.Main" } 
); 

Eine Anfrage an/admin gab den folgenden Fehler aus:

Es wurden mehrere Typen gefunden, die mit dem Controller namens 'admin' übereinstimmen. Dies kann passieren, wenn die Route, die Dienste dieser Anfrage ('{Controller}/{Aktion}/{id}') nicht Namespaces angeben ...

Der Antrag auf 'admin' die gefunden hat folgende passende Controller:

RR.FacebookControllers.AdminController
RR.Controllers.AdminController
RR.StoreControllers.AdminController

Aber warten Sie eine Minute! Habe ich den Controller-Namespace nicht angegeben ....? Was ist los.... ?

Nun, es stellte sich heraus, dass der Admin-Controller-Namespace meines Standardbereichs RR_MVC.Controller statt Rolling_Razor_MVC.Controller.Main war.

Aus irgendeinem Grund in MVC 2 gab dies kein Problem, aber in MVC 3 tut es. Ich denke MVC 3 verlangt nur, dass Sie expliziter sind, wenn es mögliche Unklarheiten gibt.

0

Ich hatte dieses Problem ...

gelöst durch einen Projektverweis in einen der CSPROJ Dateien

4

das gleiche Problem haben zu entfernen. Säuberte den Mülleimer und ich war gut zu gehen.

+1

War nicht genug, um die Lösung zu säubern, ich musste auch alte .dll-Dateien aus dem Bin entfernen – Noah