I have an application here with a mix of webform and mvc. I specify the routing as below

        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
        );   

So that virtual path to "Upload/New" actually maps to an aspx webform page.

But my problem is that Html.ActionLink("Test", "Controller", "Action") now renders

/Upload/New?Controller=Controller&Action=Action

Having looked at the MVC source code, I understand that it is because ActionLink calls to RouteCollection.GetVirtualPath(requestContext, routeName, mergedRouteValues), where routeName is left to null. And somehow this defaults to use the AspxRoute route to construct the url. I tried to added another route before "AspxRoute", but it seems it always defaults to the non-mvc routehandler one.

How does RouteCollection.GetVirtualPath behave when routeName is null? And why is it behaving this way for my case?

How do I construct a correct url? Do I need to write a new Htmlhelper extension?

Cheers

Edit
Report