不是说 viewstate是用来维持页面状态的吗?但为什么 我把 enableviewstate 设置成 false  提交页面后  页面的状态还在  就是 textbox中的值还在页面中显示着<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" EnableViewState="false" %><!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">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </div>
    </form>
</body>
</html>

解决方案 »

  1.   

    是因为这个时候textbox的值是由post back data中得到的 而非viewstate如果想强制每次提交后textbox的值都清空,在PageLoad里面写TextBox1.Text = ""
      

  2.   

    那 viewstate存放的控件状态倒是是指什么?
      

  3.   


    不能通过Form提交回服务器端的数据 比如Textbox的BackColor看下面这个例子 页面上有两个按钮 其中一个改变文本框的背景色 另一个只单纯产生一个postback
    1. 当TextBox1的EnableViewState=true时,先点击第一个按钮,TextBox1的背景色变为红色;之后再点击第二个按钮,TextBox1的背景色还是红色,是因为BackColor这个属性被保存到ViewState里
    2. 当TextBox1的EnableViewState=false时,先点击第一个按钮,TextBox1的背景色变为红色;之后再点击第二个按钮,TextBox1的背景色没了,是因为ViewState不起作用
    无论哪种情况,由于TextBox1的Text属性是通过Form提交给服务器端的(即PostbackData),因此都不会消失aspx代码
    <asp:TextBox ID="TextBox1" runat="server" EnableViewState="false"></asp:TextBox><br />
        <asp:Button ID="btnChangeColor" runat="server" Text="改变文本框背景色" 
            onclick="btnChangeColor_Click" /><br />
        <asp:Button ID="btnPostback" runat="server" Text="产生一次Postback" />aspx.cs代码
    protected void btnChangeColor_Click(object sender, EventArgs e)
            {
                TextBox1.BackColor = System.Drawing.Color.Red;
            }