Chrome 后退按钮页面刷新 - ASP.net
Posted
技术标签:
【中文标题】Chrome 后退按钮页面刷新 - ASP.net【英文标题】:Chrome Back button page refresh - ASP.net 【发布时间】:2011-02-13 19:22:24 【问题描述】:我有一个 ASP.net 应用程序 (c#)。
当用户在特定页面上时,他们单击此页面上的链接,将他们带到子页面,显示产品详细信息。
如果用户单击浏览器后退按钮,我需要将父页面刷新到其初始状态。即所有输入数据的文本框都需要为空白,任何隐藏的字段都需要重置等。基本上,当用户点击返回时,我需要一个 CTRL-F5。
禁用后退按钮不是一种选择。
我只在某些页面上需要这个。
在 IE 和 Firefox 中,我可以毫无问题地使用它。但是对于 chrome,文本框仍然包含它们的值,隐藏字段也是如此。如果我在 Chrome 中按 CTRL-F5,页面会正确重置为其初始状态。
这是我尝试过的代码。
<%@ OutputCache Location="None" VaryByParam="None" %>
还有这个:
Response.Buffer = true;
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetAllowResponseInBrowserHistory(false);
Response.Cache.SetNoStore();
还有这个:
Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
Response.Cache.SetValidUntilExpires(false);
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
我也尝试了各种不同的组合,但没有成功。
谢谢
【问题讨论】:
您在哪个 Chrome(s) 上尝试过这个?开发?贝塔?稳定的?窗户? 【参考方案1】:按下浏览器的后退按钮时,浏览器不会自动重置 INPUT 字段。相反,浏览器会保留用户的输入,使用户更容易返回并更改输入。
您无法在服务器端解决此问题,因为浏览器会为此绕过缓存。相反,您可以在输入字段上使用autocomplete="off"
html 属性来防止它们被浏览器保留。
您也可以使用 javascript 手动重置表单:
document.getElementById("form1").reset();
【讨论】:
谢谢。这并不能解释为什么 Ie 和 Firefox 似乎令人耳目一新,但 Chrome 却没有。 我猜这是 Google 人员的设计选择。我仍然很高兴他们支持他autocomplete
属性作为解决方法。
这是 Chrome for devs 的一个讨厌的“功能”。我花了很长时间才弄清楚我的动态表单发生了什么(用户可以添加新行,这些行在提交时会保存到数据库中)。在“返回”时,Chrome 不会填写先前添加的行的 db id(即使我的应用程序以 HTML 格式输出),所以我的应用程序认为它们都是新的,并在进一步提交时复制了它们。不过,autocomplete="off"
可以解决问题。【参考方案2】:
这两行代码为我解决了 Chrome 问题:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
我使用这个可选行告诉浏览器不要为同一页面的每个请求创建历史条目:
Response.Cache.SetAllowResponseInBrowserHistory(true);
来源:
Most popular answer in this post
Optional line
【讨论】:
【参考方案3】:“蛮力”解决方案是在页面上放置一些 javascript,以便在页面加载时将数据设置为某个已知状态。因此它会根据数据数组或 json 对象查找所有元素并设置数据。在最初的请求中,由于一切都是默认的,因此设置没有任何区别。在后退按钮请求中,由于仍然需要运行 javascript,因此它会重置所有值,而不管浏览器如何。
我不相信您可以强制浏览器以您描述的方式运行,因为这取决于每个浏览器他们希望如何实现后退按钮 - chrome 只是以不同的方式执行。
【讨论】:
【参考方案4】:您也可以将 autocomplete="off" 放在表单标签上,而不是每个输入字段上。
【讨论】:
以上是关于Chrome 后退按钮页面刷新 - ASP.net的主要内容,如果未能解决你的问题,请参考以下文章