我有3个文本框,2个下拉列表,2个RadGrid,2个Poeple的页面选择器控件,当用户单击页面的asp:按钮(保存按钮)时,保存到数据库的记录和页面重定向到另一个页面。
当用户点击浏览器的后退按钮时,那些在前一页上的文本框中输入的数据仍然存在,如果再次用户点击asp:按钮而不更改文本框值,重复记录保存到数据库中。
以前的输入值仅在文本框中保留,而不是单击后退按钮时的任何其他控件。
请让我知道如何解决此问题。我的所有文本框控件都在 asp:FormView 中。
提前致谢。
答案 0 :(得分:0)
尝试停止浏览器缓存。 后退按钮并不总是重新加载页面。
// Stop Caching in IE
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
// Stop Caching in Firefox
Response.Cache.SetNoStore();
检查以下细节:
答案 1 :(得分:0)
现代浏览器实现了一种称为后向缓存(BFCache)的东西。当您按后退/前进按钮时,不会重新加载实际页面(并且不会重新运行脚本)。
如果您必须在用户按后退/前进键时执行某些操作 - 请收听BFCache页面显示和页面隐藏事件。
伪jQuery示例:
$(window).bind("pageshow", function() {
// update hidden input field
});
答案 2 :(得分:0)
看它帮助你: 在JavaScript中,当页面即将卸载时会触发onbeforeunloadevent,并且可能有多个原因导致此卸载。例如,单击后退或前进或刷新按钮或单击页面上的链接等
通常,使用onbeforeunloadevent来处理浏览器后退按钮功能,如下所示:
<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...");
}
}
}
答案 3 :(得分:0)
<强>简单。将此html属性添加到您不希望浏览器自动填充的任何字段。
autocomplete="off"
例如:
<input type="email" name="email" autocomplete="off">