如何获取当前操作的URL(修改一些路由数据后)?

时间:2010-08-17 18:30:49

标签: asp.net-mvc asp.net-mvc-routing

我正在通过母版页中的“更改语言”控件对网站进行本地化。我需要使用您在每种不同语言中使用的当前URL来呈现控件。

因此,如果你在http://site.com/ en /主页/关于并且您将语言更改为法语,我需要引导您http://site.com/ fr < / STRONG> /首页/关于

本地化代码适用于路由数据语言属性,因此我一直在努力弄清楚如何:

  1. 访问当前操作(包含所有原始参数)
  2. 获取当前操作的URL(包含所有原始参数)并更改路径数据。
  3. 有人能指出我正确的方向吗?

    我已尝试将ViewContext从父级传递到UserControl,这使我可以访问路径数据,但我无法弄清楚如何从中获取语言路由URL。

2 个答案:

答案 0 :(得分:0)

我在我正在本地工作的网站上运行它,它似乎工作。可能有一种更清洁的方式。

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声明,但我认为它看起来并不好看。希望这会有所帮助。

答案 1 :(得分:0)

我对此并不是百分之百满意,我还没有达到可以充分测试其影响的阶段,但这是我到目前为止的目标。如果你有更好的解决方案,请回答。

我从主页面传递了ViewContext,因此我从您当前所在的任何网址获取了路径数据的ViewContext。

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