【发布时间】:2011-02-22 13:00:32
【问题描述】:
我在购物车页面上遇到了似乎是 Google Chrome 和 Safari 的缓存问题。购物车中有 2 个下拉列表。当您在更改下拉列表中的值后点击结帐按钮时,它会将列表中选择的内容提交到数据库。
解释意外的行为有点困难,所以我将尝试一步一步地写出来,并说明我的问题。
假设第一个下拉列表具有以下值:
- VALUE1
- VALUE2
- VALUE3
第二个下拉列表的值为:
- 小飞象1
- DUMBO2
- DUMBO3
我将商品添加到购物车。
屏幕显示:VALUE1,DUMBO1
数据库说:VALUE1,DUMBO1
我点击了结帐。
数据库显示:VALUE1,DUMBO1(我在结帐后看不到下拉列表,因为我不在购物车页面)
我按下了返回键。
屏幕显示:VALUE1,DUMBO1
数据库说:VALUE1,DUMBO1
我下拉 VALUE1 组合并选择 VALUE2,立即选择 VALUE2,然后网站回发并在下拉列表中重新选择 VALUE1(从数据库重新加载)
瞬间屏幕显示:VALUE2,DUMBO1
数据库说:VALUE1,DUMBO1
然后在从 DROPDOWNLIST_SELECTIONCHANGED 事件回发之后
屏幕显示:VALUE1,DUMBO1
数据库说:VALUE1,DUMBO1
点击结帐。
数据库显示 VALUE1 ,DUMBO1(点击结帐后看不到下拉列表,因为我不在购物车页面)
返回。
屏幕显示:VALUE2,DUMBO1
数据库说:VALUE1,DUMBO1
所以它似乎记住了我选择的 VALUE2,即使它在我签出之前跳回了 VALUE1。
这似乎是一个缓存问题,但是我有一些无缓存代码来防止缓存该页面,该页面在 Firefox 和 Internet Explorer 中运行良好,但在 Chrome 和 Safari 中似乎失败了。我基本上是在购物车页面的标题中返回:no-cache、no-store 和 must-revalidate 以尝试防止缓存,但基于这种情况,它似乎无论如何都在缓存页面而不是在我重新加载它时点击后退按钮。
目前我愿意接受任何解决方案或建议。谢谢!
【问题讨论】:
-
是的,我在 PageLoad 上设置下拉列表值,并且我只在不是回发时设置值,就像你建议的那样。
-
你能把它归结为一个非常简单的测试用例(你有很多步骤),然后人们就能更好地重现它。
标签: asp.net caching safari drop-down-menu google-chrome