【问题标题】:Browser back button do not clear the previous input Textbox values浏览器后退按钮不清除之前输入的文本框值
【发布时间】:2015-10-29 03:37:15
【问题描述】:

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

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

【问题讨论】:

  • 在重定向到不同页面之前清除文本框的值!!不优雅:P
  • 我认为this questionthis question 会有所帮助;)。

标签: c# asp.net


【解决方案1】:

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

// 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

【讨论】:

  • 感谢您的回复。请让我知道我应该把你建议的两条线放在哪里? Page_Load 事件内部?
  • @user3196511 您可以在页面的任何位置访问您的响应。覆盖 OnInit() 方法是一种方法。查看第二个链接stackoverflow.com/questions/914027/…
  • 当我在覆盖 OnInit() 方法中尝试您的代码时。我收到此错误页面:Confirm for Resubmission ,Error_Cache_Miss 请回复我应该在代码中更改什么。另外,其中一个文本框对此代码不清楚,是因为它有Text='<%# Bind("BarcodeNo") %>' this 吗?
【解决方案2】:

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

如果您必须在用户点击后退/前进键的情况下执行某些操作 - 侦听 BFCache pageshow 和 pagehide 事件。

一个伪 jQuery 示例:

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

查看GeckoWebKit 实现的更多详细信息。

【讨论】:

  • 感谢您的回复。由于文本框的 1 具有 auto post back = true,因此当我尝试您的代码时,文本框选择的索引更改事件触发器和文本框在 inserting 记录时变为空。我希望在浏览器后退按钮单击时使用此功能。请回复
  • 对于每个其他文本框,您的代码都可以正常工作。但唯一的问题是 1 个具有 OnTextChanged 事件和 AutoPostBack="true" 的文本框,因此当我将此文本框 ID 放入您的代码中时,它会在 插入 记录时清除文本框(所以我无法保存此文本框的记录)。请让我知道这个解决方案。请回复——
  • 好的,我又回答了,看看对你有帮助。
  • 不知道你为什么用AutoPostBack="true"?
  • 因为对于 1 个文本框,我正在使用 OnTextChanged 事件,所以我必须为该文本框使用 AutoPostBack = true。请回复一些解决方案
【解决方案3】:

See It 可以帮助您: 在 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...");
}

上面的代码 sn-p 在除 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...");
}

因此,合并后的代码 sn-p 将如下所示:

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...");
        }
    }
}

【讨论】:

  • 我无法得到您的回复。请检查我对您的回复我只面临其中包含 OnTextChanged 事件的文本框的问题。休息一下,您以前的解决方案工作正常。请查看我之前的回复并针对该问题提出一些解决方案。
  • 是的,我想我意识到这段代码可以帮助你!
【解决方案4】:

简单。将此 html 属性添加到您不希望浏览器自动填充的任何字段。

autocomplete="off"

例如:

<input type="email" name="email" autocomplete="off">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2013-03-02
    • 2013-07-31
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2011-02-17
    相关资源
    最近更新 更多