浏览器后退按钮不清除以前输入的文本框值

本文关键字:输入 文本 按钮 清除 浏览器 | 更新日期: 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">