我有以下路线:
routes.MapRoute(
"Default", // Route name
"{language}/{controller}/{action}/{id}",
new { language = "en", controller = "XY", id = UrlParameter.Optional }
);
为了更改网站的语言,我想创建链接,这些链接与当前页面的网址完全对应,但是有另一种语言部分。
生成这样的链接最好的方法是什么?
答案 0 :(得分:2)
最有可能的是,您需要在每个链接呈现View的ViewModel或ViewData中插入{language}
值。你可以通过几种不同的方式实现这一目标;例如重载控制器的OnActionExecuted()
方法。如果采用这种方法,我建议让所有控制器继承单个基本控制器。
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.Controller.ViewData["Language"] = GetUserLanguage();
base.OnActionExecuted(filterContext);
}
然后在你的视图中:
@Url.Action("Index", "Home", new { language = ViewData["Language"] })
或者,您可以考虑使用自动附加此值的逻辑重载Url.Action()
和Html.ActionLink()
方法。
答案 1 :(得分:1)
你可以这样做:
@Html.RouteLink("Switch Language", "Default", new {
controller = ViewContext.RouteData.Values["controller"],
action = ViewContext.RouteData.Values["action"],
id = ViewContext.RouteData.Values["id"],
language = "fr"
})
尽管如此,建立一个扩展方法可能是有意义的。