找到了一个动态加载web用户自定义控件的问题,不知道算不算是微软的bug

今天在动态加载(LoadControl)ascx时,发现了一个问题,搞了半天,才发现问题的所在,不知道算不算是微软设计中的一个bug。
问题是这样的:webform上有一个placeholder,还有一个button,button的click事件是这样的

private void Button1_Click(object sender, System.EventArgs e)
{
    Control ctl = LoadControl("WebUserControl1.ascx");
    placeholder1.Controls.Add(ctl);
}

WebUserControl1.ascx上有一个label,然后WebUserControl1.ascx中的Page_Load事件是这样的

private void Page_Load(object sender, System.EventArgs e)
{
    if (!IsPostBack)
    {
        Label1.Text = "hello world!";
    }
}

看上去没什么问题,点击button后placeholder加载一个控件,这个控件给自己的一个label置一个初始值。但事实,并不是我们想上去的那样……
程序运行后,点击button,自定义控件正常加载,但是label上并不是我们想要的"hello world!",而是默认的"label",为什么???

经过研究,我发现了这个一个事实, 这个自定义控件被加载时,其IsPostBack已经是true了(虽然它才第一次被加载),而不是我们想象中的false。
我的想法本来是这样的,点击button时,主form上的ispostback是true,而自定义控件的是false,但事实并不是我们有时所想象的。

所以,结论是,自 定义控件中,在!IsPostBack 框框中来初始化值是不正确的(很多介绍asp.net的书籍中都在!IsPostBack中初始化值,但这仅对webform有效),会产生一些意想不到的后果。 所以,建议初始化工作可以放在oninit事件中。

转载于:https://www.cnblogs.com/oop/archive/2005/06/16/175504.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值