2010-07-27 73 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,也不需要從基礎控制器繼承任何控制器。

我認爲這是更好的解決方案。