我有一个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();
我也尝试了不同的组合,但没有成功。
感谢
答案 0 :(得分:6)
按下浏览器的后退按钮时,浏览器不会自动重置INPUT字段。相反,浏览器会保留用户的输入,使用户更容易返回并对输入进行更改。
您无法解决此服务器端问题,因为浏览器会绕过缓存。相反,您可以在输入字段上使用autocomplete="off"
HTML属性,以防止浏览器保留它们。
您也可以使用JavaScript手动重置表单:
document.getElementById("form1").reset();
答案 1 :(得分:2)
这两行为我解决了Chrome问题:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
我使用这个可选行告诉浏览器不要为同一页面的每个请求创建一个历史记录条目:
Response.Cache.SetAllowResponseInBrowserHistory(true);
<强>来源:强>
答案 2 :(得分:0)
'强力'解决方案是在页面加载时将一些javascript设置为将数据设置为某种已知状态。因此它找到所有元素并根据数据数组或json对象设置数据。在初始请求中,由于一切都是默认的,因此设置没有任何区别。在后退按钮请求中,由于仍然必须运行javascript,因此无论浏览器如何,它都会重置所有值。
我不相信你可以强迫浏览器以你描述的方式运行,因为它取决于每个浏览器他们想要实现一个后退按钮 - chrome只是以不同的方式。
答案 3 :(得分:0)
您还可以将自动完成=&#34;关闭&#34;在表单标记而不是每个输入字段。