Mam tutaj aplikację z połączeniem webform i mvc. Podam routing poniżej:Html.ActionLink konstruuje niewłaściwy link, gdy dodana zostanie trasa inna niż 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
);
Tak więc wirtualna ścieżka do "Upload/New" faktycznie odwzorowuje stronę formularza internetowego aspx.
Ale moim problemem jest to, że Html.ActionLink ("Test", "Kontroler", "Action"), teraz czyni
// Nowe? Prześlij Controller = Kontroler & Action = Akcja
Po zapoznaniu się z kodem źródłowym MVC, rozumiem, że dzieje się tak, ponieważ połączenie ActionLink wywołuje RouteCollection.GetVirtualPath(requestContext, routeName, mergedRouteValues), gdzie parametr routeName ma wartość null. I w jakiś sposób domyślnie używa się trasy AspxRoute do skonstruowania adresu URL. Próbowałem dodać inną trasę przed "AspxRoute", ale wygląda na to, że zawsze jest ona domyślną pozycją non-mvc.
Jak działa RouteCollection.GetVirtualPath zachowanie, gdy parametr routeName ma wartość null? I dlaczego zachowuje się w ten sposób w moim przypadku?
Jak skonstruować poprawny adres URL? Czy muszę napisać nowe rozszerzenie Htmlhelper?
Cheers
Hi dzięki. Wiem, że działa RouteLink, ale to tylko drobna niedogodność! Wszystkie magiczne struny. Dlaczego ActionLink nie działa. –
Zawiera tylko jeden ciąg niż ActionLink, a pierwotne pytanie brzmiało "Jak utworzyć poprawny adres URL?". Powodem, dla którego jest to konieczne, jest to, że twój WebFormRouteHandler zapewnia "poprawne" dopasowanie do trasy, a ponieważ jest dodawany przed domyślną trasą w RouteTable, jest on zwracany jako pierwszy. Ale w każdym razie dodałem kolejną odpowiedź, która może być bardziej do twoich potrzeb. –