Estoy usando asp.net mvc 2 y creo una localización basada en rutas.ASP.NET MVC Url.Acción y nombre de la ruta valor
- mi ruta se ve así:
{culture}/{controller}/{action}
- me vaya a mi controlador de casa:
en/Home/Index
mi punto de vista controlador de casa tienen una enlaces a otros controladores:
<a href='<%= Url.Action("Prods","Products") %>' >Products</a> <a href='<%= Url.Action("Index","About") %>' >About</a>
primer enlace código generado: /en/Products/Prods
pero el segundo genera: /Home/Index
No puedo entender por qué Url.Action
omite el parámetro de ruta {culture}
cuando paso el valor Index
en la acción argumento? ¿Qué estoy haciendo mal?
configuración Ruta:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Login", // Route name
"{controller}/Index", // URL with parameters
new { controller = "Login", action = "Index" } // Parameter defaults
).RouteHandler = new SingleCultureMvcRouteHandler();
routes.MapRoute("Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Entonces
foreach (Route r in routes)
{
if (!(r.RouteHandler is SingleCultureMvcRouteHandler))
{
r.RouteHandler = new MultiCultureMvcRouteHandler();
r.Url = "{culture}/" + r.Url;
if (r.Defaults == null)
{
r.Defaults = new RouteValueDictionary();
}
r.Defaults.Add("culture", "en");
if (r.Constraints == null)
{
r.Constraints = new RouteValueDictionary();
}
r.Constraints.Add("culture", new CultureConstraint(cultures));
}
}
Gracias por toda la ayuda
Si incluye la configuración de ruta completa, es más fácil encontrar el problema. –
@ João Angelo Gracias por responder, busque la actualización –
@marc_s Gracias, lo agrego después de todas las rutas aquí: r.Url = "{culture} /" + r.Url; –