我在这样的网址中有网站文化:
routes.MapRoute(
"Default",
"{language}/{controller}/{action}/{id}",
languageDefaults,
languageConstraints)
它就像一个魅力,在自定义MvcHttpHandler的帮助下,根据路由值在每个请求上设置当前线程的UI文化。我的问题是如何自动将当前请求的语言路由值添加到所有传出链接?例如。当请求page / EN / Foo / Bar时,我想要这个
<%=Html.ActionLink(
"example link",
MVC.Home.Index()) %>
自动生成与此相同的结果:
<%=Html.ActionLink(
"example link",
MVC.Home.Index()
.AddRouteValue(
"language",
this.ViewContext.RouteData.Values["language"]) %>
当然,对于像BeginForm()等所有其他帮助程序也一样。在我目前的代码库中已经有了&gt;使用这些助手的1000次,并且每次都需要.AddRouteValue是非常脆弱的,因为一些开发人员会忘记100%确定地使用它。
我希望唯一的解决方案不是为所有内容创建自定义Html助手吗?
答案 0 :(得分:3)
它应该保留路由中定义的所有值并自动显示在RouteData
中,除非您将其设置为其他值。尝试创建没有T4MVC的链接或检查您的路由定义。这样的事情对我很有用:
routes.MapRoute("Default with language", "{lang}/{controller}/{action}/{id}", new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional,
}, new { lang = "de|fr" });
routes.MapRoute("Default", "{controller}/{action}/{id}", new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional,
lang = "en",
});
+
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
MvcHandler handler = Context.Handler as MvcHandler;
if (handler == null)
return;
string lang = (string)handler.RequestContext.RouteData.Values["lang"];
CultureInfo culture = CultureInfo.GetCultureInfo(lang);
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
}
+
<%: Html.ActionLink("About us", "Detail", "Articles", new { @type = ArticleType.About }, null) %>