Как получить ссылку на текущее действие (после изменения некоторых данных маршрута)? - PullRequest
1 голос
/ 17 августа 2010

Я локализую сайт через элемент управления Change Language на главной странице. Мне нужно отобразить элемент управления с текущим URL-адресом, на котором вы находитесь, на каждом из разных языков.

Так что, если вы используете http://site.com/en/Home/About и вы измените язык на французский, мне нужно направить вас на http://site.com/fr/Home/About.

Код локализации работает со свойством языка данных маршрута, поэтому я пытался выяснить, как я могу:

  1. Получить доступ к текущему действию (со всеми исходными параметрами)
  2. Получить URL-адрес текущего действия (со всеми исходными параметрами) с измененными данными маршрута.

Кто-нибудь может указать мне правильное направление?

Я пытался передать ViewContext от родителя в UserControl, который дает мне доступ к данным маршрута, но я не могу понять, как получить URL-адрес с маршрутизацией языка.

Ответы [ 2 ]

0 голосов
/ 18 августа 2010

Я не на 100% доволен этим, я не дошел до стадии, на которой я мог бы полностью проверить влияние этого, но это то, к чему я иду пока. Пожалуйста, ответьте, если у вас есть лучшее решение.

Я передаю ViewContext с главной страницы, чтобы получить ViewContext с данными о маршруте с любого URL, на котором вы сейчас находитесь.

private string GetLocalisedUrl(ViewContext viewContext, string language)
{
    viewContext.RouteData.DataTokens[LANGUAGE_ROUTEDATA_KEY] = language;
    UrlHelper helper = new UrlHelper(viewContext.RequestContext);

    return helper.Action(viewContext.RouteData.Values["action"].ToString(), viewContext.RouteData.Values["controller"].ToString(), viewContext.RouteData.DataTokens);
}
0 голосов
/ 17 августа 2010

Я запустил это на сайте, над которым я работаю локально, и, похоже, оно работает. Вероятно, есть более чистый путь.

HttpRequestBase hrb = HttpContext.Request;
System.Uri url = hrb.Url;
string[] test = url.AbsoluteUri.Split('/');
int nIndex = 0, nCounter = 0;
foreach(string str in test)
{
  if (str.Contains("site.com"))
  {
    nIndex = nCounter;
    break;
  }
  nCounter++;
}
string strLanguage = test[nIndex + 1];

Очевидно, что +1 может даже идти в операторе IF, но я не думаю, что это выглядело там хорошо. Надеюсь, это поможет некоторым.

...