Ich habe eine Anwendung hier mit einer Mischung aus Webform und MVC. Ich gebe Sie den Routing wie untenHtml.ActionLink konstruiere falsche Verbindung, wenn eine nicht-mvc Route hinzugefügt wird
routes.Add("AspxRoute", new Route("Upload/New", new WebFormRouteHandler<Page>("~/Uploads.aspx")));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Damit virtuellen Pfad auf „Upload/Neu“ tatsächlich Karten zu einer aspx webform Seite.
Aber mein Problem ist, dass Html.ActionLink ("Test", "Controller", "Aktion") macht jetzt
/Upload/neu? Regler = Regler & Action = Aktion
Nachdem ich mir den MVC-Quellcode angesehen habe, verstehe ich, dass ActionLink an RouteCollection.GetVirtualPath(requestContext, routeName, mergedRouteValues) anruft, wo routeName auf null gesetzt ist. Und irgendwie verwendet dies standardmäßig die AspxRoute-Route, um die URL zu erstellen. Ich habe versucht, eine andere Route vor "AspxRoute" hinzuzufügen, aber es scheint, dass es immer auf den Nicht-MCV-Routehandler eins ist.
Wie funktioniert RouteCollection.GetVirtualPath verhalten, wenn routeName null ist? Und warum verhält es sich so für meinen Fall?
Wie konstruiere ich eine korrekte URL? Muss ich eine neue HtmlHelper-Erweiterung schreiben?
Prost
Hallo Dank. Ich weiß, dass RouteLink funktioniert, aber es ist nur ein kleines bisschen Unannehmlichkeit! All die magischen Saiten. Warum funktioniert ActionLink nicht? –
Es enthält nur eine weitere Zeichenfolge als ActionLink und Ihre ursprüngliche Frage war "Wie konstruiere ich eine korrekte URL?". Der Grund, warum dies erforderlich ist, ist, dass Ihr WebFormRouteHandler eine "gültige" Routenkombination bereitstellt. Da er vor der Standardroute in der RouteTable hinzugefügt wird, wird er zuerst zurückgegeben. Aber wie auch immer, ich habe eine andere Antwort hinzugefügt, die Ihnen vielleicht besser gefällt. –