浏览器后退按钮不清除以前输入的文本框值
本文关键字:输入 文本 按钮 清除 浏览器 | 更新日期: 2023-09-27 18:06:40
我有3个文本框,2个下拉列表,2个RadGrid, 2人的选择器控件在一个页面上,当用户点击页面的asp:按钮(保存按钮),记录保存到数据库和页面重定向到另一个页面。
但是当用户点击浏览器的返回按钮时,在前一页的文本框中输入的数据仍然存在,如果用户再次点击asp:按钮而不改变文本框的值,重复的记录被保存到数据库中。
先前的输入值只保留在文本框中,而不是在单击后退按钮时保留在任何其他控件中。
请告诉我如何解决这个问题。我所有的文本框控件都在asp:FormView内。
谢谢。
尝试停止浏览器缓存。后退按钮并不总是重新加载页面。
// Stop Caching in IE
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
// Stop Caching in Firefox
Response.Cache.SetNoStore();
查看详细信息:
网页浏览器中的后退按钮是如何工作的?
从ASP禁用所有浏览器的浏览器缓存。净
现代浏览器实现了向后缓存(BFCache)。当你点击后退/前进按钮时,实际的页面不会重新加载(脚本也不会重新运行)。
如果你必须在用户按后退/前进键的情况下做一些事情——监听BFCache的pageshow和pagehide事件。
一个伪jQuery示例:
$(window).bind("pageshow", function() {
// update hidden input field
});
查看Gecko和WebKit实现的更多细节
看它帮助你:在JavaScript中,onbeforeunloaddevent在页面即将卸载时被触发,这种卸载可能有多种原因。例如,点击后退或前进或刷新按钮,或者点击页面上的链接,等等。
通常,onbeforeunloaddevent用于处理浏览器后退按钮功能,如下所示:
<body onbeforeunload=”HandleBackFunctionality()”>
function HandleBackFunctionality()
{
if(window.event) //Internet Explorer
{
alert("Browser back button is clicked on Internet Explorer...");
}
else //Other browsers e.g. Chrome
{
alert("Browser back button is clicked on other browser...");
}
}
但是有一个问题,当用户点击浏览器的刷新按钮时,同样的事件会发生。因此,为了掌握是否单击了刷新按钮或后退按钮,我们将使用后面的代码。
if(window.event.clientX < 40 && window.event.clientY < 0)
{
alert("Browser back button is clicked...");
}
else
{
alert("Browser refresh button is clicked...");
}
上面的代码片段在FireFox以外的浏览器中都能很好地工作。对于FireFox,我们需要应用以下检查:
if(event.currentTarget.performance.navigation.type == 1)
{
alert("Browser refresh button is clicked...");
}
if(event.currentTarget.performance.navigation.type == 2)
{
alert("Browser back button is clicked...");
}
因此,合并后的代码片段如下:
function HandleBackFunctionality()
{
if(window.event)
{
if(window.event.clientX < 40 && window.event.clientY < 0)
{
alert("Browser back button is clicked...");
}
else
{
alert("Browser refresh button is clicked...");
}
}
else
{
if(event.currentTarget.performance.navigation.type == 1)
{
alert("Browser refresh button is clicked...");
}
if(event.currentTarget.performance.navigation.type == 2)
{
alert("Browser back button is clicked...");
}
}
}
简单。
将此html属性添加到任何您不希望浏览器自动填充的字段。autocomplete="off"
例如:<input type="email" name="email" autocomplete="off">