1

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

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

ドロップダウンの値を再度青に変更すると、有効期限に関係なく、新しく作成された緑の Cookie が正しく表示されますか? ドロップダウンを緑に変更すると、新しい Cookie が作成されて保存されますが、ブラウザの色は赤のままです。

では、Cookie の作成はどのように機能するのでしょうか。Cookie の名前が同じなので、ここで緑の Cookie を赤の Cookie に置き換えなかったのはなぜですか?

4

1 に答える 1

2

サンプルのコードを見ると、Cookie が既に存在し、ドロップダウン リストの値が Cookie に保持されている色に設定されているかのように機能するようには見えません。次に、コードが「ColorSelector_IndexChanged」に到達するまでに、ドロップダウンの値はすでに変更されているため、Cookie は同じ色で再作成されます。

page_load コードで PostBack を確認すると、次のように動作するはずです。

    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 イベントの前に呼び出されるため、Cookie に書き込む前にドロップダウンリストの選択した値を変更しているためです。

于 2011-07-05T10:41:57.880 に答える