2009-08-20 161 views
0

我想更改我的網站中的語言。我以爲我可以使用Handler來做到這一點,所以下降將爲http://domain.com/Handler.ashx?language=en-US,f.i.更改ASHX處理程序上的Thread.CurrentThread.CurrentCulture

所以,它調用處理器,具有此代碼:

string selectedLanguage = context.Request.QueryString["language"]; 

    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage); 

    context.Response.ContentType = "text/plain"; 
    context.Response.Write("Hello World"); 

    context.Response.Redirect(context.Request.UrlReferrer.AbsoluteUri.ToString()); 

但是,當它回到過去,Thread.CurrentThread.CurrentCulture設置爲PT-BR,這是初始值。

我的問題是:處理程序上的線程與加載內容的aspx頁面不同?你有什麼建議作爲解決方法?

謝謝

回答

1

的Response.Redirect()發送一個HTTP重定向到用戶的瀏覽器,瀏覽器,然後讓另一個請求到服務器。這會導致IIS處理全新的請求,因此會創建一個新線程來處理此請求。

儘管我不會推薦一個處理程序來完成此操作,但如果切換到Server.Transfer,您的想法可能會起作用,因爲Server.Transfer不使用Http重定向,而只是創建一個新的請求以通過ASP.NET發送管道,都在相同的初始請求的上下文中。

希望有幫助,

+0

謝謝。它按我想要的那樣工作。 只是出於好奇:你會在這種情況下推薦什麼? ty再 – 2009-08-20 17:57:48

+0

那麼,本地化和文化信息應該是你試圖在會話級別處理的東西。使用此處理程序方法可解決通過此處理程序運行的所有請求的問題,但這會給您的代碼帶來不必要的緊張和困惑。通過實現一些非常簡單的服務器控件或類似於放置在頁面(或主頁面)上的OnInit將線程文化設置爲會話中存儲的某個值,並且當用戶從下拉列表中選擇一個項目時更改該值,你已經解決了整個會話的問題。 我可能不明白... – LorenVS 2009-08-20 18:00:58

+0

好的。此解決方案有效。但每次我點擊一個鏈接,它只是'重新啓動'的文化,我想這是出於同樣的原因,你在原始答案上說。我要參加會議級別的嘗試。 – 2009-08-20 18:46:54