当我通过F5或浏览器浏览应用程序时遇到一个奇怪的问题。当我第一次运行以下页面时,文本框上会显示“Hello”。单击“单击我”按钮,文本将更改为“单击!”。没关系。关闭浏览器并再次运行F5(或在浏览器中查看),文本框显示“Clicked!”。它不再显示初始值。我在IE6上看到了这个问题(这是我雇主的唯一选择),但不是在FF3.6和Googgle Chrome 4.x上。我认为它可能与ViewState有关。但是,ViewState被禁用后问题仍然存在。
对出了什么问题的任何想法或暗示?
下面的Default.aspx文件:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server" enableviewstate="false">
<div>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Click Me" EnableViewState="false" UseSubmitBehavior="true" />
<asp:TextBox ID="TextBox1" runat="server" Text="Hello" EnableViewState="false" ></asp:TextBox>
</div>
</form>
</body>
</html>
下面的Default.aspx.cs文件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = "Clicked!";
}
}
答案 0 :(得分:0)
TextBox1中显示的文本正在被浏览器缓存,因此基本上它(IE6)在您刷新页面时不向服务器发出请求。您会注意到,当您按F5时,浏览器会提示您:
这意味着当您按F5或刷新时,浏览器正在为您执行回发操作,这会触发Button1_Click
方法,从而导致TextBox1包含“ Clicked!”
我不太确定你是怎么遇到的:
关闭浏览器并再次运行F5(或在浏览器中查看),文本框显示“Clicked!”
问题因为我无法让IE6这样做。一种可能的解决方案是将一些缓存约束放入您发送的标头中,这样浏览器就不会在其缓存中存储任何内容,这应该可以防止出现问题。