Ich habe eine ansonsten leere ASP.NET MVC 3 Anwendung mit 2 Controllern erstellt, HomeController
und OtherController
.
HomeController.cs sieht so aus:
%Vor%Index.cshtml sieht so aus:
%Vor%Und natürlich, Othercontroller.cs:
%Vor% So weit, so gut. Ich starte die App und es sagt mir alles ist OK!
Nun nehme ich den Standard RegisterRoutes
von Global.asax.cs:
Und ich zerknittere es, damit keine Routen mit OtherController
übereinstimmen:
Wenn ich die Seite jetzt starte, stürzt sie mit folgender Fehlermeldung ab:
%Vor% Ich habe den Controller-Namen und den Aktionsnamen im Aufruf von .Action
angegeben. Es werden keine URLs generiert und keine Anforderungen werden gestellt. Warum muss das Routing überhaupt einbezogen werden?
Ich denke, dass dieser Blogbeitrag Ihnen helfen wird, ein wenig mehr zu verstehen:
Ссылка .
Im Wesentlichen ist das Routing beteiligt, um zu ermitteln, welcher Controller zur Verarbeitung der Anforderung "hochfährt", und basierend auf den von Ihnen gesendeten Parametern die entsprechende Aktion, die aufgerufen wird, und der MVCRouteHandler verwendet diese, um eine Entscheidung zu treffen. Nur weil Sie ihm sagen, welcher Controller in Ihrer Aktion die Routing-Tabelle nicht magisch ignoriert, gehen Sie direkt zu dieser Controller-Klasse und umgehen Sie alle anderen MVC-Tugenden, die im Backend passieren. Denken Sie daran, dass diese @HTML.Action
-Methoden eine ganze Reihe von Überlastungen benötigen, die beeinflussen könnten, welche Route in der Routingtabelle verwendet werden soll (denke an die URL-Struktur für Beispiel).
Die MVC-Pfade sind nicht auf statischen Inhalt und müssen als solche über das URLRoutingModule analysiert werden, das die Routing-Tabelle verwendet, um zu entscheiden, was zu tun ist. Da Sie keine passende Route haben, erhalten Sie einen Fehler.
BEARBEITEN
In meiner Hetzrede habe ich Ihre Schlussbemerkung nicht angesprochen. Du hast recht, es wurde keine URL generiert, aber eine Anfrage an die Anwendung wurde generiert. HTML.Action verwendet weiterhin routing, um zu bestimmen, welcher Controller, Aktion, Bereich, Parameter verwendet werden soll. Ich denke, es ist fair zu sagen, dass es einfach ist, einen ActionLink zu generieren und auf ihn zu klicken.
Routing wurde durch die Verwendung von Html.Action auf einem Controller eingebunden. Wenn die Engine den "Other" HtmlHelper mit einer Aktion von "Index" nicht finden konnte, wurde standardmäßig dieser Pfad ausgeführt. Keine Route gefunden, daher wurde ein Fehler ausgegeben.
InvalidOperationException Die erforderlichen virtuellen Pfaddaten können nicht gefunden werden.
Die Lösung für mich war wie folgt:
Ich hatte die folgende Zeile, die mir einen Fehler gab:
%Vor%Das Hinzufügen eines dritten Parameters löste den Fehler:
%Vor%Tags und Links asp.net-mvc routes