Warum brauchen Sie eine Route, die für Html.Action definiert ist?

8

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:

%Vor%

Und ich zerknittere es, damit keine Routen mit OtherController übereinstimmen:

%Vor%

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?

    
Jacob Krall 20.01.2012, 01:32
quelle

3 Antworten

4

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.

    
Tommy 20.01.2012, 16:08
quelle
0

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.

Ссылка

    
Bryan Naegele 20.01.2012 02:31
quelle
0

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%     
Memet Olsen 18.12.2013 15:00
quelle

Tags und Links