ASP.NET MVC Url.Action и значение имени маршрута

Я использую asp .net mvc 2 и создать локализацию на основе маршрутов.

  1. мой маршрут выглядит так: {culture} / {controller} / {action}
  2. Я перехожу к своему домашнему контроллеру: en / Home / Index
  3. у моего домашнего контроллера есть ссылки на другие контроллеры:

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

Спасибо за помощь

15
задан marc_s 29 October 2011 в 11:17
поделиться