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

时间:2015-08-06 06:17:44

标签: c# asp.net

我有3个文本框,2个下拉列表,2个RadGrid,2个Poeple的页面选择器控件,当用户单击页面的asp:按钮(保存按钮)时,保存到数据库的记录和页面重定向到另一个页面。

当用户点击浏览器的后退按钮时,那些在前一页上的文本框中输入的数据仍然存在,如果再次用户点击asp:按钮而不更改文本框值,重复记录保存到数据库中。
以前的输入值仅在文本框中保留,而不是单击后退按钮时的任何其他控件。
请让我知道如何解决此问题。我的所有文本框控件都在 asp:FormView 中。
提前致谢。

4 个答案:

答案 0 :(得分:0)

尝试停止浏览器缓存。 后退按钮并不总是重新加载页面。

// Stop Caching in IE
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

// Stop Caching in Firefox
Response.Cache.SetNoStore();

检查以下细节:

How does the Back button in a web browser work?

Disabling browser caching for all browsers from ASP.NET

答案 1 :(得分:0)

现代浏览器实现了一种称为后向缓存(BFCache)的东西。当您按后退/前进按钮时,不会重新加载实际页面(并且不会重新运行脚本)。

如果您必须在用户按后退/前进键时执行某些操作 - 请收听BFCache页面显示和页面隐藏事件。

伪jQuery示例:

$(window).bind("pageshow", function() {
  // update hidden input field
});

查看GeckoWebKit实施的详细信息。

答案 2 :(得分:0)

看它帮助你: 在JavaScript中,当页面即将卸载时会触发onb​​eforeunloadevent,并且可能有多个原因导致此卸载。例如,单击后退或前进或刷新按钮或单击页面上的链接等

通常,使用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">