【问题标题】:ASP.NET - Google Chrome caching DropDownList selectionsASP.NET - Google Chrome 缓存 DropDownList 选择
【发布时间】: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


【解决方案1】:

我遇到了类似的问题,我花了几天时间测试却没有找到答案。

假设我们有一个填充了颜色的下拉列表。每次更改值时,我都会使用 ajax 进行部分回发以保存值并执行更多操作,例如检查股票。

我选择(按此顺序):红、白、蓝、绿。

然后我点击结帐,当我惊喜地返回时,选择了红色。我又回去了,我被选中了白色。回了四次,然后是蓝色,最后是绿色。

我在 IE 和 FF 上进行了尝试,发现它工作正常,所以这不是代码中的错误。它必须与chrome有关。

有人可以帮忙吗?

编辑:我尝试使用我正在制作的另一个网页,它工作正常,但我找不到它们之间可能导致它的任何差异。

Edit2:我找到了一种“解决”它的方法,在导航事件中使用ScriptManager.RegisterStartupScript 来编写一个正确设置值的脚本,而不是在codebehind 处进行。这不是一种非常优雅的方式,但它对我有用,我希望其他人也有类似的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2019-01-13
    • 1970-01-01
    • 2020-07-08
    • 2012-11-09
    相关资源
    最近更新 更多