当用户点击返回按钮时显示错误信息

3
我创建了一个简单的示例来展示我遇到的问题。在页面上放置一个asp.net复选框和一个asp.net文本框。在后台代码中(使用vb.net),当复选框被选中时,在文本框中显示一些内容,并在未选中时显示一个空文本框。很简单,对吧?现在来回多次切换复选框的选中/未选中状态,文本框有内容/无内容。一切正常 - 对吧?
现在在浏览器上点击返回按钮几次。每次点击返回按钮时显示的结果是相反的 - 复选框被选中,但文本框中没有任何内容。复选框未被选中,文本框中有文本。无论您将vb代码放在哪里(页面加载,checkedchanged)- 结果都相同。
我认为这与页面被保存在缓存中的时间有关。就像页面在复选框触发“click”事件时被保存在缓存中,但填充文本框的代码尚未被触发一样。然而,我也可能完全错了,可能是我做错了一些非常简单的事情。
任何想法/思路/帮助将不胜感激。
示例代码:
ASPX:
<asp:CheckBox id="ChkBox1" runat="server" AutoPostBack="True" text="Sample" /><br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

VB:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If ChkBox1.Checked = True Then
            TextBox1.Text = "Checked"
        Else
            TextBox1.Text = ""
        End If
    End Sub
1个回答

4

这就是应该的方式。

浏览器会记住每次向服务器发送请求的时间。每当复选框状态更改时,您的页面就会发送请求。

当复选框被选中时,文本框确实为空。这时发生了回传(Postback)。您的服务器端代码设置了文本值,您可以在浏览器中看到结果。

但是您的浏览器会记住您所发送的内容,即一个勾选的复选框和空文本。

当您取消勾选时,相反的情况发生。

如果您使用F5刷新其中一个返回的页面,则浏览器应该要求重新发送Post data(后台数据)。然后您将回到预期的状态。

告诉浏览器不要缓存内容(如果您想让浏览器忘记它): 这不是VB代码,但我确信您在VB.net上也能找到类似的函数。

context.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();

好的 - 谢谢和很棒的信息 - 这很有道理,也符合我认为正在发生的事情。现在 - 在现实世界的情况下,我该如何处理这个问题?我不能让我的用户点击返回按钮并看到不正确的复选框/文本框结果。 - user1375002
1
告诉浏览器不要缓存内容。 - nunespascal
你好。即使为缓存添加了给定的标头,仍然存在相同的问题,是否有其他方法来处理这种情况。在浏览器后退后,它应该显示实际数据,而不是从浏览器中显示缓存的数据。 - Liquid
在Chrome和Safari浏览器上遇到问题,但在IE和Mozila浏览器上运行良好。 - Liquid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接