【问题标题】:Pressing back prefills inputs with value from right before submit在提交之前按回预填充输入值
【发布时间】:2011-01-04 14:08:04
【问题描述】:

使用以下 htlm:

<html>
    <body>
        <form action="#">
            <p><input type="text"></input></p>
        </form>
    </body>
</html>

加载时输入的值为空。 将其更改为“1”并输入(提交) 页面将显示“1” 按返回将用输入的“1”而不是初始状态(空)预填充页面

我的真实世界应用程序是一个 asp.net 页面,页面顶部包含搜索输入,底部包含结果。按下返回时,这些字段会预填充与下面显示的结果中显示的值不对应的值。

我怎样才能让浏览器的后退按钮用与历史对应页面的初始状态相对应的值预填充页面?

我宁愿不禁用 asp.net 缓存,但如果没有其他选择,我也不介意。 尽管如此,所有禁用缓存的谷歌点击都不起作用。

更新
我认为输入的值应该对应于历史列表中条目的初始状态。 情况似乎并非如此。它对应于发布之前的状态。

  1. http:\localhost:8080\index.html => 输入 = ""
  2. http:\localhost:8080\index.html?val=2 => 输入 = "2"
  3. http:\localhost:8080\index.html => 输入 = "2"

【问题讨论】:

  • 您确定任何缓存禁用(浏览器端)不起作用吗?
  • @m.edmondson:经过更多搜索,我找到了一种可行的方法。有点难过我失去了缓存能力,但就这样吧......
  • 在我的情况下,我的回答是正确的 - 阅读底部的位
  • 这里有一些解决方案stackoverflow.com/questions/25019160/…

标签: asp.net html back


【解决方案1】:

另一种方法是在文档加载完成后使用 JavaScript 清除字段。

【讨论】:

  • 我不想清除它们,我想将它们设置为正确的值
【解决方案2】:

您也许可以引入一个“虚拟”URL 变量,以诱使浏览器相信它是一个全新的页面。

www.example.com/form.aspx?dummy=3423902

使用一些 javascript 使浏览器以新的随机dummy= 再次拉取页面

服务器只是忽略这个值。

我知道这每次都会导致 2 次回发,但肯定会奏效。努力“要求”浏览器不要首先使用 http 标头进行缓存 - 尽管我相信当你说:

我宁愿不禁用 asp.net 缓存但不介意如果没有 选择。所有的谷歌点击 但是禁用缓存不起作用。

这不起作用。

【讨论】:

  • 第一个选项会起作用,尽管我认为它有点牵强,仍然让我失去所有缓存。
【解决方案3】:

这应该可行。这是一个 jquery 函数,因此您需要在页面中引用它。例如,这会将输入项的值设置为“A”...


$(document).ready(function() {
    // this code will be run immediately after the page has displayed.
    // "ROpt" is the id of the field.
    $("#ROpt").val("A");
 });

【讨论】:

  • 是的,如果我可以在编译时知道输入的值应该是什么,这将是一个选项。通过 Ajax 调用获取它们也需要我记录所有请求。这也是不行的。
猜你喜欢
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
相关资源
最近更新 更多