我创建了一个简单的例子来展示我遇到的问题。在页面上放置一个asp.net复选框,在同一页面上放置一个asp.net文本框。在后面的代码中(使用vb.net),在选中复选框时,将代码显示在文本框中,并在未选中复选框时显示空文本框。简单吧?现在,在选中/取消选中复选框的情况下来回切换几次,文本框中包含内容/无内容。一切正常 - 对吧?
现在点击浏览器上的后退按钮几次。每次单击后退按钮时显示的结果相反 - 复选框在文本框中没有任何内容。未选中复选框,文本框中有文本。你把vb代码(页面加载,checkedchanged)放在哪里都没关系 - 结果相同。
我认为它与保存在缓存中的页面的timimg有关。类似于页面的东西正在缓存中保存,而复选标记触发了“单击”事件,但尚未触发填充文本框的代码。然后,我可能完全脱离标记,这是一件非常简单的事,我做错了。
非常感谢任何想法/想法/帮助。
示例代码:
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
答案 0 :(得分:3)
这是应该的方式。
每次回发到服务器时,浏览器都会记住。只要复选框状态发生变化,您的页面就会回发。
选中复选框状态后,文本框确实为空。这是回发发生的时间。您的服务器端代码设置文本值,您可以在浏览器中看到它。
但你的背部会记住你发送的内容,这是一个选中的复选框和空文本。
取消选中时会发生保留案例。
如果您使用F5刷新其中一个后页,您的浏览器应该要求发送回发布数据。你会回到预期的状态。
告诉浏览器不要缓存内容(如果您希望浏览器忘记它): 不是VB代码,但我相信你也会在VB.net上找到类似的功能。
context.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();