1

我有一个用户控件“UserApplianceControl”,我需要将其动态添加到asp 页面。

我正在使用以下代码这样做:

用户.aspx.cs

protected override void OnLoadComplete(EventArgs e)
    {

        base.OnLoadComplete(e);
        A5Lib.User u;
        UserServiceReference.UserServicesClient myProxy = new UserServiceReference.UserServicesClient();
        u = myProxy.GetUser("user1");

        if (listOfAppliances != null)
        {

            foreach (A5Lib.Appliance str in u.Appliances)
            {
                UserApplianceControl uac = (UserApplianceControl)LoadControl("UserApplianceControl.ascx");
                uac.setAppliance(str);
                Panel1.Controls.Add(uac);
            }
        }
    }

在 UserApplianceControl 中,我有几个按钮。但是,每当我按下按钮时,用户控件的按钮处理程序都不会被调用。实际上,首先调用 OnLoadComplete(above),因此在最后一次加载页面时填充的那些控件被重新创建,并且在处理事件之前我丢失了旧的。

为什么事件没有在 OnLoadComplete 之前触发?

4

1 回答 1

2

您在页面生命周期中重新创建控件为时已晚。

动态添加的控件必须在 onInit 之前出现(加载),才能使任何视图状态/回发功能正常工作。

将您的代码移动到页面的 OnInit 事件。这将确保在视图状态恢复之前重建所有控件,并且页面完成所有按钮/事件连接。

于 2012-04-20T20:46:22.553 回答