2010-07-27 40 views
0

我有2个转换文化的链接。 如果我点击一个链接时,程序中调用这个代码的方法:问题转换文化

 Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(ln); 
     Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ln); 
     return RedirectToAction("index"); 

如果我调试的文化看起来是正确的改变,但在指数重定向,将cultureUI没有改变。

我在本地尝试使用visual studio web server(Cassini)。

谢谢

+1

它不应该在重定向时切换线程。为了以防万一,请检查线程窗口以确保您仍然在Index方法的同一线程中。 – 2010-07-27 23:51:12

回答

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"); 
     } 
    } 

而且这是在基控制器类中的方法:

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(); 
    } 
0

我已经解决symply添加此方法在Global.asax:

void Application_PostAcquireRequestState(object sender, EventArgs e) 
{ 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(languageFromSession); 
    Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(languageFromSession); 
} 

每次我在控制器中调用一个动作时,都会调用此方法。

通过这种方式,我不使用cookie,也不需要从基础控制器继承任何控制器。

我认为这是更好的解决方案。