1

我正在研究 Cookie。我跟着http://asp.net-tutorials.com/state/cookies/教程。这里 Page_Load 检查 BackgroundColor cookie,如果存在,它将获取值并设置背景颜色,否则 onselectedindexchanged 事件将创建一个新的 cookie。

这里在第一次将cookie设置为红色后,我尝试再次将下拉值更改为绿色,因此控制流将首先到达Page_Load,它将获取cookie值 Red 并将背景颜色设置为 Red ,下一步控件将流向 ColorSelector_IndexChanged,并且将再次为 Green 创建一个名为 BackgroundColor 的新 cookie。

当我再次更改下拉值蓝色时,无论过期时间如何,新创建的绿色 Cookie 应该正确显示吗?因为当我将下拉菜单更改为绿色时,会创建并保存一个新的 cookie,但浏览器仍然是红色的。

那么 cookie 创建是如何工作的呢?由于 cookie 名称相同,为什么这里的 Green cookie 没有替换 Red 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 回答