Как работает создание файлов cookie?
Я работаю над Cookies. Я следовал http://asp.net-tutorials.com/state/cookies/ учебник. Здесь Page_Load проверяет файл cookie BackgroundColor, и если он существует, он извлекает значение и устанавливает цвет фона, в противном случае при событии onselectedindexchanged будет создан новый файл cookie.
Здесь, впервые установив для cookie красный цвет, я снова пытаюсь изменить значение раскрывающегося списка на зеленый, чтобы поток управления сначала достиг страницы Page_Load, а затем выбрал значение cookie красного цвета и установил цвет фона красным, затем элемент управления перейдет к ColorSelector_IndexChanged, и снова будет создан новый файл cookie для Green с именем BackgroundColor.
Когда я снова изменяю значение выпадающего синего цвета, независимо от времени истечения, вновь созданный Зеленый Cookie должен отображаться правильно? Потому что, когда я меняю раскрывающийся список на Зеленый, создается и сохраняется новый файл cookie, но браузер все еще отображается в красном цвете.
Так как же работает создание файлов cookie? Поскольку имя файла cookie совпадает, почему Green Cookie здесь не заменил Red cookie?
1 ответ
Глядя на код в примере, он не выглядит так, как будто он может работать, как будто cookie уже существует, он устанавливает значение раскрывающегося списка в цвет, который хранится в cookie. Затем к тому времени, когда код получает значение "ColorSelector_IndexChanged", значение раскрывающегося списка уже изменено, и поэтому файл cookie просто воссоздается с тем же цветом.
Проверьте наличие PostBack в коде 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, поэтому вы изменяете выбранное значение в раскрывающемся списке, прежде чем записать его в файл cookie.