动态用户控制回发初始化

时间:2009-10-08 13:47:51

标签: asp.net postback

我有一个用户控件,可以动态加载其他用户控件。问题是在回发时我的控件不存在。现在我的印象是我必须重新初始化它们。

现在要执行此操作,因为它们是UserControls并使用ascx文件,UserControl的控件都没有在空构造函数中初始化。

问题:如何在此时加载UserControl的ascx文件?

目前我正在尝试这样做:

for (int i = 0; i < count; i++)
{
    Control ctrl;
    if(ctrlCollectionType.Rows[i]["Type"] is UserControl)
        ctrl = LoadControl((string)ctrlCollectionType.Rows[i]["Path"]);
    else
        this.LoadControl(ctrlCollectionType[i]["Type"], null);

    ctrl.ID = i;
    pnlContent.Controls.Add(ctrl);
}

其中ctrlCollectionType是userControl的类型。

编辑:按照Joel Coehoorn的意见解决。

1 个答案:

答案 0 :(得分:3)

您必须执行两个步骤:

  • 加载控件(this.LoadControl()调用执行此操作)
  • 将加载的控件添加到表单的Controls集合中。您没有显示任何执行此操作的代码。

此外,您需要在 viewstate在页面生命周期中恢复之前执行此操作,否则事情将无法按预期工作。由于view_ate在Page_Load事件触发之前恢复,这意味着您需要在Page_Init或更早版本上执行此操作。