我有一个用户控件“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之前没有触发事件?
答案 0 :(得分:2)
您正在页面生命周期中过晚地重新创建控件。
动态添加的控件必须在onInit之前出现(加载),以便任何视图状态/回发功能都能正常工作。
将代码移至页面的OnInit事件。这将确保在恢复viewstate之前重建所有控件,并且页面完成所有按钮/事件连接。