在我们的webapp上,该页面包含一个带有一些字段的过滤器表单,一个SEARCH按钮,它调用jQuery AJAX,根据过滤器表单数据加载项目。从javascript我们将表单过滤器值推送到url以维护浏览器历史记录。
当我们按下BACK按钮时,页面“重新加载”,但是我们看到表单值没有刷新到当前值。检查页面源代码,我们看到html包含带有正确值属性的文本框元素(来自url值),但文本框仍然显示表单的最后一个值。有时。有时它有效。
我们在表单值中添加了autocomplete =“off”,这有点帮助,“有时”变为“通常”,显示的值通常与html源匹配。但不总是。我们认为浏览器缓存是坏人 - 当我们按下后退或前进按钮时,有时页面不会刷新,而是来自“某处”。
我们添加了一个Web配置缓存设置:
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="CacheProfileNone" noStore="true" varyByParam="*" duration="0" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
并将该属性添加到控制器操作
[OutputCache(CacheProfile = "CacheProfileNone")]
public ActionResult Index(QueryViewModel model)
{...}
但它没有帮助。 :(有时当我们按下后退按钮时显示错误的表单值,与html值不匹配。表单值不会被自定义的javascript函数操作。我们使用console.log输出添加onchange事件,并且看不到日志消息,所以我们认为表单元素显示值不依赖于我们的决定或代码,但(我们认为)它取决于浏览器的东西。
我们打开新建议下一步该做什么,让浏览器始终加载页面并显示当前在html源中定义的值。
欢迎任何建议!谢谢!
答案 0 :(得分:1)
我猜测(因为你没有提供代码),但这并不像你想象的那样工作:
从javascript我们将表单过滤器值推送到url 维护浏览器历史记录。
您需要调查History API replaceState()
方法。
参考此处:
https://developer.mozilla.org/en-US/docs/Web/API/History_API