代码之家  ›  专栏  ›  技术社区  ›  Tristan Warner-Smith

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

  •  1
  • Tristan Warner-Smith  · 技术社区  · 15 年前

    所以如果你在 http://site.com/ /如果你把语言改成法语,我需要指示你 http://site.com/ 法国 /家/关于。

    本地化代码适用于route data language属性,因此我一直在尝试如何:

    1. 访问当前操作(使用所有原始参数)
    2. 获取路由数据更改后的当前操作的url(使用所有原始参数)。

    有人能给我指出正确的方向吗?

    我尝试过将ViewContext从父级传递到UserControl,这使我能够访问路由数据,但我不知道如何从中获取语言路由url。

    2 回复  |  直到 13 年前
        1
  •  0
  •   XstreamINsanity    15 年前

    我在我在本地工作的网站上运行了这个,它看起来很有效。可能还有更干净的方法。

    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语句中,但我觉得它在那里看起来不太好。希望这对你有所帮助。

        2
  •  0
  •   Tristan Warner-Smith    15 年前

    我不是100%满意这个,我还没有到一个阶段,我可以完全测试的影响,但这是我要走到目前为止。如果你有更好的解决办法,请回答。

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