改变基于链接的站点文化

时间:2016-05-09 08:16:22

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

我有一个ASP.NET 5网站,其中文化在链接中定义。例如:

http://localhost:8080/nl/customers

http://localhost:8080/fr/customers

http://localhost:8080/en/customers

我需要实现一个按钮来更改语言。有没有办法做到这一点,而无需解析网址并自己添加语言前缀?

1 个答案:

答案 0 :(得分:1)

您可以创建辅助方法

public static class UrlHelperExtensions
{
    public static string RouteToCurrent(this UrlHelper urlHelper, RouteData routeData, object routeValues)
    {
        // Create an IDictionary<string, object>
        var requestRouteData = new RouteValueDictionary(routeData.Values);

        var replaceValues = new RouteValueDictionary(routeValues);
        foreach (var value in replaceValues)
        {
            if (requestRouteData.ContainsKey(value.Key))
            {
                 requestRouteData[value.Key] = value.Value;
            }                    
            else
            {
                 requestRouteData.Add(value.Key, value.Value);
            }                    
        }

        return urlHelper.RouteUrl(requestRouteData);
    }
}

作为参数,您可以传递当前routedata和一个包含您想要更改的键和值的匿名对象。

@foreach (var lang in Model.LanguageList)
{
   <li>
       <a href="@Url.RouteToCurrent(ViewContext.RouteData, new {locale = lang})">@lang</a>
   </li>
}