动态创建控件时,Page.Load事件之后也需要恢复ViewState

我曾经发过一个帖子问这样的问题:

在下面的代码中,我想实现的是:
(1) 第一次打开网页,TextBox中的文本为"Good Morning."
(2) 单击Button,形成Postback,然后更改TextBox的文本为"Good Afternoon"

可是不管怎样,TextBox的文本总是 "Good Morning.", 请各位帮我看看是什么原因。

(我不想捕捉ButtonOnclick事件)

C# code

 

    public partial class _Default : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            Button button1 = new Button();

            button1.Text = "Click";

            button1.ID = "button1";           

 

            TextBox textBox1 = new TextBox();

            textBox1.Text = "Good Morning.";

            textBox1.ID = "textBox1";           

 

            if (IsPostBack)

            {

                textBox1.Text = "Good Afternoon.";

            }

 

            Form.Controls.Add(button1);

            Form.Controls.Add(textBox1);

        }

    }

 

 

在学习了《Pro ASP.NET 3.5 in C# 2008》之后,找到了答案。

虽然ViewState通常是在Page.Load事件之前恢复,但是如果你是在Page.Load事件委托之中创建的控件,ASP.NET 将会在Page.Load事件委托结束之后恢复ViewState.

所以如果将上述代码作一下修改,把改变TextBoxText 部分的代码放到Page_PreRender中,就可以了。

    public partial class _Default : System.Web.UI.Page

    {

 

        protected void Page_Load(object sender, EventArgs e)

        {

            Button button1 = new Button();

            button1.Text = "Click";

            button1.ID = "button1";

 

            TextBox textBox1 = new TextBox();

            textBox1.Text = "Good Morning.";

            textBox1.ID = "textBox1";

 

            Form.Controls.Add(button1);

            Form.Controls.Add(textBox1);

        }

 

        protected void Page_PreRender(object sender, EventArgs e)

        {

            if (IsPostBack)

            {

                TextBox textBox1 = (TextBox)Page.FindControl("textBox1");

                textBox1.Text = "Good Afternoon.";

            }

        }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值