2 Stimmen

Mehrdeutiger Controller-Fehler, aktualisiert auf MVC 2

Ich aktualisierte auf MVC 2, aktualisiert alle meine Baugruppen (tat Kopie auf lokale auch).

Ich habe meine Routen auf diese Weise geändert:

routes.MapRoute(
                "Admin",
                "admin/{controller}/{action}/{id}",
                new { controller = "Admin", action = "index", id = ""},
                new[] { "MyNamespace.Web.Controllers.Admin" } // namespace
            );

 routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" },  // Parameter defaults
                new[] { "MyNamespace.Web.Controllers" } // namespace
            );

Meine Kontrolleure sehen wie folgt aus:

/controllers/admin/ProductController.cs
/controllers/ProductController.cs

Ich erhalte immer noch die Fehlermeldung:

he controller name 'Product' is ambiguous between the following types:
MyNamespace.Web.Controllers.Admin.ProductController
MyNamespace.Web.Controllers.ProductController

Sollte das Hinzufügen des Namensraums dieses Problem beheben?

3voto

Dan Atkinson Punkte 11038

Ihr erster Weg legt nahe, dass es eine Klasse gibt /controllers/Admin/AdminController.cs . Ist dies korrekt?

Lesen Sie auch este . Es sieht so aus, als ob Sie den Namespace-Bereich zur Verfügung gestellt haben, aber sie haben nicht die gleiche Struktur, die für ASP.NET MVC v2 erforderlich zu sein scheint.

Die Struktur Ihrer Projektlösung sollte folgendermaßen aussehen:

  • Bereiche
    • Verwaltung
      • ProductController
  • Steuerungen
    • ProductController

Ihre Struktur sieht folgendermaßen aus.

  • Steuerungen
    • Verwaltung
      • ProductController
    • ProductController

1voto

Levi Punkte 32475

Es gab eine Änderung in MVC 2 Beta, bei der die Angabe eines Namensraums (wie "MyNamespace.Web.Controllers") zu einer Suche in diesem Namensraum führte. und seine untergeordneten Namespaces . Dies unterscheidet sich vom MVC 1-Verhalten, bei dem die Angabe eines Namespaces dazu führt, dass die Fabrik nur in diesem Namespace sucht.

Diese Änderung wird vor MVC 2 RTM wieder rückgängig gemacht. Insbesondere wird das MVC 2 RTM-Verhalten sein, dass die Angabe von "MyNamespace.Web.Controllers" nur diesen Namespace durchsucht - genau wie in MVC 1 - und die Angabe von "MyNamespace.Web.Controllers.*" (man beachte den Punkt-Stern) wird dieser Namespace plus seine Kinder durchsucht.

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