在actionlink上更改文化,而不刷新包含资源文件的页面

时间:2012-08-31 10:37:55

标签: c# asp.net-mvc

我正在使用.NET Framework 4中的EF 5在asp.net mvc 4中工作(感谢Azure尚未成为4.5)。 我试图让用户通过按下按钮来更改当前的语言设置。需要更改的内容保存在资源文件中。

首先我在web.config中获取浏览器设置

<globalization culture="auto" uiCulture="auto"/>

然后我尝试通过超链接更改它。 以下是我正在使用的链接示例:

<li>@Html.ActionLink("FR", "ChangeLanguage", "Account", new { language = "fr" }, null)</li>
<li>@Html.ActionLink("EN", "ChangeLanguage", "Account", new { language = "en" }, null)</li>
<li>@Html.ActionLink("NL", "ChangeLanguage", "Account", new { language = "nl" }, null)</li>

以下是我填写文字的方式:

@Html.Encode(MyProject.Web.Resources.General.Header_UserBadge_SettingsDeleteCurrentPicture)

这是他们链接到的控制器操作:

public ActionResult ChangeLanguage(string language)
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(language);
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language);
        }

资源文件名为:

  1. General.fr.resx =&gt;法国
  2. General.resx =&gt;英文
  3. General.nl.resx =&gt;荷兰
  4. 现在显然这不起作用。我似乎无法找到任何我想要做的例子。我能找到的所有例子都会刷新页面。

    所以我有两个问题:

    1. 可以这样做吗?如果是的话,我做错了怎么样或者做错了什么?
    2. 如果不能这样做,那么什么是好的解决方案?目前,在操作结束时重定向似乎不会更改语言设置。

2 个答案:

答案 0 :(得分:1)

您必须将用户更改的语言设置存储在Cookie或会话中,并Application_AcquireRequestState Global.asax.csCurrentUICultureCurrentCulture设置Thread.CurrentThread来自存储在cookie / session中的语言。

您还可以将用户的首选语言存储在数据库中,这样用户每次登录时都不需要设置语言。

答案 1 :(得分:0)

一种可能的方法是将您的链接放在Partial View中,并让您的行动在您更改文化后返回部分视图。

    public ActionResult ChangeLanguage(string language)
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(language);
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language);

         return PartialView("YourPartialView");
    }

可以从jquery / ajax调用调用此操作,因此您看不到回发将会发生