我创建了一个简单的示例来说明我遇到的问题。在页面上放置一个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
最佳答案
这是应该的方式。
浏览器会记住您每次发回服务器时的情况。每当复选框状态更改时,页面就会回发。
选中复选框状态后,文本框确实为空。这是发生回发的时间。您的服务器端代码设置了文本值,然后您就可以在浏览器中看到它。
但是您的后背会记住您发送的内容,即已选中的复选框和空白文本。
当您取消选中时,将发生备用情况。
如果使用F5刷新这些后一页之一,则浏览器应要求发送回后数据。然后您将返回到预期状态。
告诉浏览器不要缓存内容(如果您希望浏览器忘记内容):
不是VB代码,但我相信您也会在VB.net上找到类似的功能。
context.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();
关于asp.net - 用户单击后退按钮时显示的错误信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11343091/