2013-12-10 200 views
3

我在我的網站上使用asp.net文化來顯示不同語言的網站,即荷蘭語(nl)和法語(fr)。該網站有一個按鈕,通過將網站的網址添加到?lang = nl來將網站更改爲另一種語言。當您更改語言時,會保存一個cookie,以便下次訪問該語言。cookie無法讀取

由於某種原因,網站不會看到cookie。 cookie在那裏,併發送到服務器,我檢查與提琴手。有時它的值爲空,有時它是空字符串。

這是我在BasePage類使用的代碼:

protected override void InitializeCulture() 
{ 
    if (!Page.IsPostBack) 
    { 
     string cookieLang = ""; 

     try 
     { 
      cookieLang = HttpContext.Current.Request.Cookies["UserSettings"]["lang"]; 
     } 
     catch (Exception e) 
     { 
      Response.Write(string.Format("<!-- {0} -->", e.Message)); 
     } 

     if (!string.IsNullOrEmpty(Request.QueryString["lang"])) 
     { 
      cookieLang = Request.QueryString["lang"].ToLower(); 
     } 

     if (!string.IsNullOrEmpty(cookieLang)) 
     { 
      string selectedCulture = cookieLang == "fr" ? "fr-BE" : "nl-BE"; 

      this.Lang = cookieLang; 

      UICulture = selectedCulture; 
      Culture = selectedCulture; 

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


      Response.Cookies["UserSettings"]["­lang"]= Lang; 
      Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(7); 
     } 


     base.InitializeCulture(); 
    } 
} 

誰能告訴我什麼,我做錯了什麼?

編輯: 我忘了告訴,這個代碼工作正常,當我測試它在我的本地PC,但在服務器上部署時,它不能正常工作。

回答

1

我認爲你的錯誤在於你如何處理cookie和事件的順序。

  • 第1步:嘗試從cookie中獲取文化名稱。如果存在,請記住它。
  • 第2步:嘗試從查詢字符串中獲取文化名稱。如果存在,請記住它。
  • 第3步:根據以前的設置當前文化。
  • 步驟4:將文化名稱保存在cookie中。

下面的代碼對我的作品始終堅持:

protected override void InitializeCulture() 
{ 
    var cultureName = string.Empty; 

    // Step 1 
    var cookie = this.Request.Cookies["culture"]; 

    if (cookie != null) 
    { 
     cultureName = cookie.Value; 
    } 

    // Step 2 
    var query = this.Request.QueryString["culture"]; 

    if (query != null) 
    { 
     cultureName = query; 
    } 

    // Step 3 
    var culture = new CultureInfo(cultureName); 

    Thread.CurrentThread.CurrentCulture = culture; 
    Thread.CurrentThread.CurrentUICulture = culture; 

    // Step 4 
    this.Response.Cookies["culture"].Value = culture.Name; 

    base.InitializeCulture(); 
} 
+0

我確定訂單是正確的。您的代碼會打破整個頁面。 – Jerodev

+0

我的代碼存在錯誤(我在最後設置的cookie名稱錯誤)。 –

0

當你的代碼是工作的地方,而不是部署的服務器,這樣你就可以檢查以下東西以及

  1. 檢查你是否相對分配了你的文化檔案的路徑。
  2. 然後初始化文化以在Cookie中加載適當的文化信息。

希望這會有所幫助, 謝謝。

+0

我在web.config中使用url重寫。這可能與此有關嗎? 當我在url中使用一個參數時,文化交換功能可以正常工作。問題是始終爲空的cookie。 – Jerodev