我有2个用于切换文化的链接。 如果我单击一个链接,程序将使用以下代码调用方法:
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(ln);
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ln);
return RedirectToAction("index");
如果我查看调试文化是否正确更改,但在索引重定向中,cultureUI不会更改。
我正在尝试使用visual studio web服务器(Cassini)。
谢谢
答案 0 :(得分:0)
我们从视图中的链接做同样的事情。但是,我们不会将代码放在操作中,而是放在基本控制器类上的方法。这是行动:
public ActionResult SetCulture(string cultureCode)
{
string returnUrl = string.Empty;
if (Request != null)
{
returnUrl = Request.UrlReferrer.ToString();
//Write to the cookie
Response.Cookies.Add(new HttpCookie("Language", cultureCode));
}
if (!String.IsNullOrEmpty(returnUrl))
{
return this.Redirect(returnUrl);
}
else
{
return RedirectToAction("List");
}
}
这是基本Controller类中的方法:
protected override void ExecuteCore()
{
//Retrieve from cookies
HttpCookie cultureCookie = Request.Cookies["Language"];
if (cultureCookie != null)
{
string culture = cultureCookie.Value;
if (!String.IsNullOrEmpty(culture))
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture);
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(culture);
}
}
base.ExecuteCore();
}
答案 1 :(得分:0)
我已经解决了在global.asax中添加此方法的问题:
void Application_PostAcquireRequestState(object sender, EventArgs e)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(languageFromSession);
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(languageFromSession);
}
每次调用控制器中的动作时都会调用此方法。
通过这种方式我不使用cookie,我不需要从基础控制器继承任何控制器。
我认为这是更好的解决方案。