Asp.net mvc 如何获取当前操作的url(在修改某些路由数据后)?
我正在通过母版页中的更改语言控件对站点进行本地化。我需要用您当前所在的url以不同的语言呈现控件 因此,如果您使用en/Home/About,并且您将语言更改为法语,我需要指示您使用fr/Home/About 本地化代码在route data language属性上起作用,因此我一直在尝试如何: 使用所有原始参数访问当前操作 在路由数据更改的情况下,获取包含所有原始参数的当前操作的url。 谁能给我指出正确的方向吗Asp.net mvc 如何获取当前操作的url(在修改某些路由数据后)?,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我正在通过母版页中的更改语言控件对站点进行本地化。我需要用您当前所在的url以不同的语言呈现控件 因此,如果您使用en/Home/About,并且您将语言更改为法语,我需要指示您使用fr/Home/About 本地化代码在route data language属性上起作用,因此我一直在尝试如何: 使用所有原始参数访问当前操作 在路由数据更改的情况下,获取包含所有原始参数的当前操作的url。 谁能给我指出正确的方向吗 我尝试将ViewContext从父级传递到UserControl,这使我能够访问
我尝试将ViewContext从父级传递到UserControl,这使我能够访问路由数据,但我不知道如何从中获取语言路由url。我在本地工作的站点上运行了此操作,它似乎起到了作用。可能有更干净的方法
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语句中,但我认为它看起来不太好。希望这能有所帮助。我对此不是100%满意,我还没有到一个可以完全测试其影响的阶段,但这是我目前要做的。如果您有更好的解决方案,请务必回答 我从母版页传递ViewContext,因此我从您当前所在的url获取带有路由数据的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);
}
谢谢你的建议,但我正在寻找一个MVC路由解决方案,而不是手动url重写解决方案。是的,我不知道如何在控制器前抓取任何东西。如果可能的话,那么我认为在全局文件中需要一个具有{language}/{controller}/{action}的文件,但是我现在不能给你一个实际的例子。