Ho un'applicazione qui con un mix di webform e mvc. A specificare il percorso come di seguitoHtml.ActionLink crea un collegamento errato quando viene aggiunta una route non-mvc
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
);
In modo che il percorso virtuale per "Carica/Nuovo" mappe in realtà ad una pagina aspx modulo web.
Ma il mio problema è che Html.ActionLink ("Test", "Controller", "Azione") ora rende
/Upload/Nuovo? Regolatore = regolatore & Action = Azione
aver guardato il codice sorgente MVC, capisco che è perché ActionLink chiama a RouteCollection.GetVirtualPath(requestContext, routeName, mergedRouteValues), dove routeName è lasciato a null. E in qualche modo questa impostazione predefinita utilizza la route AspxRoute per costruire l'url. Ho provato ad aggiungere un altro percorso prima di "AspxRoute", ma sembra sempre impostato per default sul routehandler non-mvc.
Come si comporta RouteCollection.GetVirtualPath quando routeName è null? E perché si sta comportando in questo modo per il mio caso?
Come si crea un URL corretto? Devo scrivere una nuova estensione Htmlhelper?
Acclamazioni
Ciao, grazie. So che RouteLink funziona, ma è solo un piccolo inconveniente! Tutte le corde magiche. Perché ActionLink non funziona. –
Contiene solo una stringa in più rispetto ad ActionLink e la tua domanda originale era "Come si costruisce un URL corretto?". Il motivo per cui questo è necessario è che WebFormRouteHandler fornisce una corrispondenza di route "valida" e, poiché viene aggiunta prima della route predefinita in RouteTable, viene restituita per prima. Ma comunque, ho aggiunto un'altra risposta che potrebbe essere più di tuo gradimento. –