2011-07-05 11 views
1

私はクッキーに取り組んでいます。私はチュートリアルhttp://asp.net-tutorials.com/state/cookies/を続けた。 Page_LoadはBackgroundColorクッキーをチェックし、存在する場合は値をフェッチし、背景色をonselectedindexchangedイベントに設定します。新しいクッキーが作成されます。クッキーの作成方法

初めてクッキーを赤色に設定した後、ドロップダウンの値を再び緑色に変更しようとするため、コントロールのフローが最初にPage_Loadに到達し、Cookie値Redを取得して背景色を設定します次に、コントロールがColorSelector_IndexChangedに流れ、再びGreenの新しいCookieがBackgroundColorという名前で作成されます。

ブルーをもう一度変更すると、期限切れに関係なく、新しく作成されたグリーンCookieが正しく表示されるはずです。緑にドロップダウンを変更すると、新しいクッキーが作成されて保存されますが、ブラウザはまだ赤色です。

どのようにしてクッキーの作成が機能しますか?クッキーの名前が同じである理由はなぜ緑のクッキーは赤のクッキーを置き換えていないのですか?

+0

明らかな質問ですが....新しいクッキーを書いた後でページをリフレッシュしましたか? – Fishcake

+0

@Fishcakeいいえ、単にドロップダウン値を変更するだけです。 –

+0

基本的にはそれは素晴らしいチュートリアルではありませんが、私の答えは問題を解決するはずです。 – Fishcake

答えて

2

サンプルのコードを見ると、クッキーが既に存在するかのように動作しないように見えます。クッキーに保持されている色にドロップダウンリストの値が設定されています。そして、コードが 'ColorSelector_IndexChanged'に達する頃には、ドロップダウンの値は既に変更されているので、クッキーは同じ色で再作成されます。

Page_Loadのコードでポストバックをチェックし、次のようにそれが動作するはずです:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     if (Request.Cookies["BackgroundColor"] != null) 
     { 
      ColorSelector.SelectedValue = Request.Cookies["BackgroundColor"].Value; 
      BodyTag.Style["background-color"] = ColorSelector.SelectedValue; 
     } 
    } 
} 

説明

asp.netページのライフサイクルでのPage_LoadでのSelectedIndexChanged前に呼び出されますので、これは、イベントで、ドロップダウンリストの選択された値を変更してからクッキーに書き出します。

関連する問題