我正在开发Cookie。我按照http://asp.net-tutorials.com/state/cookies/教程。 这里Page_Load检查BackgroundColor cookie,如果它存在,它将获取值并在onselectedindexchanged事件上设置背景颜色,否则将创建一个新的cookie。
在第一次将cookie设置为红色之后,我尝试再次将下拉值更改为绿色,因此控制流将首先到达Page_Load,它将获取cookie值Red并将背景颜色设置为红色,接下来控件将流向ColorSelector_IndexChanged,然后将再次创建一个名为BackgroundColor的绿色新Cookie。
当我再次将下拉值更改为蓝色时,无论过期时间如何,新创建的绿色Cookie应该显示正确吗?因为当我将下拉菜单更改为绿色时,会创建并保存新的cookie,但浏览器仍为红色。
那么cookie创建是如何工作的?由于cookie名称相同,为什么Green Cookie不替换Red cookie?
答案 0 :(得分: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之前更改下拉列表的选定值。