2013-12-10 157 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