Tengo una aplicación aquí con una mezcla de formulario web y mvc. Especifico el enrutamiento de la siguiente maneraHtml.ActionLink construye un enlace incorrecto cuando se agrega una ruta que no es 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
);
Así que camino virtual a "Subir/Nueva" en realidad se correlaciona con una página aspx formulario web.
Pero mi problema es que Html.ActionLink ("Prueba", "controlador", "Acción") ahora hace
/Subir/Novedades Controller = Controlador & Action = Acción
Después de haber examinado el código fuente de MVC, entiendo que es porque ActionLink llama a RouteCollection.GetVirtualPath(requestContext, routeName, mergedRouteValues), donde routeName se deja nulo. Y de alguna manera esto predetermina usar la ruta AspxRoute para construir la url. Intenté agregar otra ruta antes de "AspxRoute", pero parece que siempre está por defecto en el controlador de ruta que no es mvc.
¿Cómo se comportan RouteCollection.GetVirtualPath cuando routeName es nulo? ¿Y por qué se está comportando así en mi caso?
¿Cómo construyo una URL correcta? ¿Debo escribir una nueva extensión Htmlhelper?
Saludos
Hola, gracias. Sé que RouteLink funciona, ¡pero es solo un pequeño inconveniente! Todas las cuerdas mágicas. ¿Por qué ActionLink no funciona? –
Solo contiene una cadena más que ActionLink y su pregunta original fue "¿Cómo construyo una URL correcta?". La razón por la que esto es necesario es que su WebFormRouteHandler proporciona una coincidencia de ruta "válida", y como se agrega antes de su ruta predeterminada en la RouteTable, se devuelve primero. Pero de todos modos, he agregado otra respuesta que puede ser más de su agrado. –