加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET MVC5单击Html.ActionLink更改语言/文化

发布时间:2020-12-16 07:25:16 所属栏目:asp.Net 来源:网络整理
导读:我的ASP.NET MVC5应用程序存在问题.我的应用程序可以设置在浏览器中设置的lang / culture(现在只有英语和波兰语(默认)).我想通过点击 Html.ActionLink让用户改变语言/文化. 我创建了一个类: namespace Guestbook{ public static class Click { public stati
我的ASP.NET MVC5应用程序存在问题.我的应用程序可以设置在浏览器中设置的lang / culture(现在只有英语和波兰语(默认)).我想通过点击 Html.ActionLink让用户改变语言/文化.

我创建了一个类:

namespace Guestbook
{
    public static class Click
    {
        public static void SetCulture(string name)
        {
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(name);
            Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
        }

    }
}

我有我的观点:

@Html.ActionLink("PL","","Guests",routeValues: null,htmlAttributes: new { onclick = "SetCulture("pl");" })
@Html.ActionLink("EN",htmlAttributes: new { onclick = "SetCulture("en");" })

当然,它不起作用.我还需要什么? JavaScript函数?

解决方法

最简单的答案是您需要创建一个然后链接到的控制器.

public class LanguageController : Controller
{
    public ActionResult SetLanguage(string name)
    {
        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(name);
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

        HttpContext.Current.Session["culture"] = name;

        return RedirectToAction("Index","Home");
    }
}

然后在你看来:

<a href="@Url.Action("SetLanguage","Language",new { @name = "pl" })">Polski</a>
<a href="@Url.Action("SetLanguage",new { @name = "en" })">English</a>

您可以考虑将会话或类似的用户数据存储起来.

编辑:

例如,您可以在global.asax中使用Application_BeginRequest事件.

protected void Application_BeginRequest(Object sender,EventArgs e)
{
    var name = HttpContext.Current.Session["culture"] as string;

    if (string.IsNullOrEmpty(name))
    {
        return;
    }

    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(name);
    System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture;
}

编辑:

将Cookie保存在SetLanguage操作中:

var cookie = new HttpCookie("_culture",name);
cookie.Expires = DateTime.Today.AddYears(1);
Response.SetCookie(cookie);

在Application_BeginRequest中获取cookie:

var cookie = HttpContext.Current.Request.Cookies["_culture"];
var name = cookie != null ? cookie.Value : null;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读