2012-04-03 22 views
0

私は、言語設定(英語、フランス語)を含む1つのドロップダウンボックスでasp.net Webアプリケーションを持っています。私はフランス語を選択すると、私は次のようにクッキーを書く -asp.netクッキーが上書きされています

protected void ddChoice_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     HttpCookie cookie = new HttpCookie("pref"); 
     cookie.Value = ddChoice.SelectedValue; 
     cookie.Expires = DateTime.Now.AddYears(1); 
     Response.SetCookie(cookie); 
     Thread.CurrentThread.CurrentCulture = new CultureInfo(ddChoice.SelectedValue); 
     Thread.CurrentThread.CurrentUICulture = new CultureInfo(ddChoice.SelectedValue);   
     Server.Transfer(Request.Path); 
    } 

と、次のようにリクエストを開始し、このクッキーを読んで -

 protected void Application_BeginRequest(object sender, EventArgs e) 
     { 

      string lang = string.Empty;//default to the invariant culture 
      HttpCookie cookie = Request.Cookies["pref"]; 

      if (cookie != null && cookie.Value != null && !string.IsNullOrEmpty(cookie.Value.Trim())) 
      lang = cookie.Value; 

     if (string.IsNullOrEmpty(lang)) 
      lang = "en-US"; 

     Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang); 
     Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang); 
     } 

この時間は、私は、ブラウザのクッキーをオンにした場合、それが当然FR-「に設定されていますFR "である。しかしその後、私がホームページに行ってこのページをリフレッシュすると、クッキーは空白に設定されます。

どこが上書きされているのかわかりません。どんな助け?

答えて

0

イベントが空のSelectedValueで生成され、したがってあなたのCookieが空であるとします。 mehodにブレークポイントを入れたり、コメントアウトしてみてください。

+0

いいえ。テストケースは - 1.ホームページに行く - デフォルト言語(英語)、2.言語を変更する - それが変更される、3.ホームページに行く - 選択された言語(フランス語)で正しくする、4.ヒットF5 - しかし、英語にリセットされます。 – Codie

+0

なぜ 'Server.Transfer(Request.Path)'がありますか? – IvanH

+0

クライアントに更新された応答を送信するには – Codie

0

手順4のテストケースでは、F5キーを押してポストバックを取得し、言語の言語ドロップダウンがデフォルトの上位言語に設定されます。

このため、選択した言語を設定する言語ドロップダウンが配置されているコントロールまたはページに関数を記述する必要があります。

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
     setLangDropdown(); 
     } 
} 
private void setLangDropdown() 
{ 
    HttpCookie cookie = Request.Cookies["pref"]; 
    string lang = string.Empty; 

    if (cookie != null && cookie.Value != null && !string.IsNullOrEmpty(cookie.Value.Trim())) 
     lang = cookie.Value; 

    if (!string.IsNullOrEmpty(lang)) 
     ddChoice.SelectedValue = lang; 
} 

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    HttpCookie cookie = new HttpCookie("pref"); 
    cookie.Value = ddChoice.SelectedValue; 
    cookie.Expires = DateTime.Now.AddYears(1); 
    Response.SetCookie(cookie); 
    Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(ddChoice.SelectedValue); 
    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(ddChoice.SelectedValue); 



    } 
関連する問題