在页面加载时创建一个文本框tb,并在第一次赋值为"aaa"
页面上有一个按钮btn,当点击btn时,tb的值仍然是"aaa"
根据下面的代码,点击btn后页面重新加载,重新创建了一个tb。而且由于是回发,IsPostBack=true,所以不会执行tb.Text = "aaa"这个语句,但为什么tb里面的值仍然是aaa呢?protected void Page_Load(object sender, EventArgs e)
{
        TextBox tb;
        tb = new TextBox();
        Form.Controls.Add(tb);        if (!IsPostBack)
        {
            tb.Text = "aaa";
        }
}

解决方案 »

  1.   

    提交后回发,IsPostBack=true,此时
     if (!IsPostBack) 
            { 
                tb.Text = "aaa"; 
            } 
    这句不执行,页面加载的是隐藏控件hidden所保存的状态_VIEWSATTE,他用来跟踪和保存控件的状态信息
    即aaa
    你可以查看源文件,可以看到
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value=".....">
    你可以这样试试
    protected void Page_Load(object sender, EventArgs e) 

            TextBox tb; 
            tb = new TextBox(); 
            Form.Controls.Add(tb); 
            tb.Text = "aaa"; 
    }private void btn_click(object sender, EventArgs e)
    {
                tb.Text = " "; 
    }
      

  2.   

    知道什么原因了,原来是根据ID值来判断的,如果我把代码改为下面的话输入值就会没掉了protected void Page_Load(object sender, EventArgs e) 

            TextBox tb;
            tb = new TextBox();
            Form.Controls.Add(tb);        if (!IsPostBack)
            {
                tb.ID = "tb2";
            }} 
      

  3.   


    private TextBox tb;    protected void Page_Load(object sender, EventArgs e)
        {
            tb = new TextBox();
            Form.Controls.Add(tb);
            if (!IsPostBack) tb.Text = "aaa";
        }    protected void btnOk_Click(object sender, EventArgs e)
        {
            tb.Text = "bbb";
        }
    如果把Page的ViewState设置成false,如果btn_Click里面不执行任何操作,回发后tb.Text的值还是不会改变还是"aaa",textbox比较特殊。