Asp.net 更改基于链接的网站文化

Asp.net 更改基于链接的网站文化,asp.net,asp.net-mvc-5,Asp.net,Asp.net Mvc 5,我有一个ASP.NET 5网站,链接中定义了文化。例如: 我需要实现一个按钮来更改语言。有没有一种方法可以做到这一点,而不必解析url并自己添加语言前缀?您可以创建一个helper方法 public static class UrlHelperExtensions { public static string RouteToCurrent(this UrlHelper urlHelper, RouteData routeData, object routeValues) {

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


我需要实现一个按钮来更改语言。有没有一种方法可以做到这一点,而不必解析url并自己添加语言前缀?

您可以创建一个helper方法

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);
    }
}
公共静态类UrlHelperExtensions
{
公共静态字符串RouteToCurrent(此UrlHelper UrlHelper、RouteData RouteData、对象RouteValue)
{
//创建一个IDictionary
var requestRouteData=新的RouteValueDictionary(routeData.Values);
var replaceValues=新的RouteValueDictionary(routeValues);
foreach(replaceValues中的var值)
{
if(requestRouteData.ContainsKey(value.Key))
{
requestRouteData[value.Key]=value.value;
}                    
其他的
{
requestRouteData.Add(value.Key,value.value);
}                    
}
返回urlHelper.RouteUrl(requestRouteData);
}
}
作为参数,传递当前RoutedData和匿名对象,其中包含要更改的键和值

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