3

我创建了一个简单的示例来展示我遇到的问题。在页面上放置一个 asp.net 复选框,在同一页面上放置一个 asp.net 文本框。在后面的代码中(使用vb.net),放置在选中复选框时在文本框中显示内容的代码,并在未选中复选框时显示空文本框。很简单,对吧?现在来回切换几次,选中/取消选中复选框,文本框有内容/没有内容。一切正常 - 对吧?

现在点击浏览器上的后退按钮几次。每次单击后退按钮时显示的结果是相反的 - 复选框已选中,但文本框中没有任何内容。复选框未选中,并且文本框中有文本。将 vb 代码(页面加载,checkedchanged)放在哪里并不重要 - 结果相同。

我认为这与保存在缓存中的页面的时间有关。当复选标记触发“单击”事件时,页面之类的内容正在保存在缓存中,但填充文本框的代码尚未触发。再说一次,我可能完全不合时宜,这很简单,我做错了。

任何想法/想法/帮助将不胜感激。

示例代码:

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
4

1 回答 1

4

这是应该的方式。

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

当复选框状态被选中时,文本框确实是空的。这是回发发生的时间。您的服务器端代码设置文本值,您可以在浏览器中看到它。

但是你的背会记住你发送的内容,那是一个选中的复选框和空文本。

取消选中时会发生保留情况。

如果您使用 F5 刷新这些后台页面之一,您的浏览器应该要求发回帖子数据。你会回到预期的状态。

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

context.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();
于 2012-07-05T11:19:52.403 回答