Asp.Net控制初始值在第一次运行后不显示

时间:2010-08-24 20:32:09

标签: asp.net

当我通过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!";
    }
}

1 个答案:

答案 0 :(得分:0)

TextBox1中显示的文本正在被浏览器缓存,因此基本上它(IE6)在您刷新页面时不向服务器发出请求。您会注意到,当您按F5时,浏览器会提示您:

IE6 warning about resending information

这意味着当您按F5或刷新时,浏览器正在为您执行回发操作,这会触发Button1_Click方法,从而导致TextBox1包含“ Clicked!

我不太确定你是怎么遇到的:

  

关闭浏览器并再次运行F5(或在浏览器中查看),文本框显示“Clicked!”

问题因为我无法让IE6这样做。一种可能的解决方案是将一些缓存约束放入您发送的标头中,这样浏览器就不会在其缓存中存储任何内容,这应该可以防止出现问题。