Я использую asp .net mvc 2 и создать локализацию на основе маршрутов.
{culture} / {controller} / {action}
en / Home / Index
у моего домашнего контроллера есть ссылки на другие контроллеры:
Products
About
Код первой ссылки сгенерирован: / en / Products / Prods
, а второй сгенерирован: / Home / Index
Я не могу понять, почему Url.Action
пропускает параметр маршрута {culture}
, когда я передаю значение Index
в аргумент действие? Что я делаю не так?
Конфигурация маршрута:
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
);
Затем
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));
}
}
Спасибо за помощь