包含页面的OnLoadComplete后,ASP用户控件事件将触发

时间:2012-04-20 20:27:16

标签: c# asp.net visual-studio-2010

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

我正在使用以下代码:

User.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(上面)首先被调用,因此在最后一页加载时填充的那些控件被重新创建,并且在我处理事件之前我丢失了旧控件。

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

1 个答案:

答案 0 :(得分:2)

您正在页面生命周期中过晚地重新创建控件。

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

将代码移至页面的OnInit事件。这将确保在恢复viewstate之前重建所有控件,并且页面完成所有按钮/事件连接。