代码之家  ›  专栏  ›  技术社区  ›  Highstead

动态用户控件回发初始化

  •  0
  • Highstead  · 技术社区  · 15 年前

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

    现在要做到这一点,因为它们是用户控件并使用ascx文件,在空构造函数中没有初始化任何用户控件。

    问题: 此时如何加载用户控件的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是用户控件的类型。

    编辑: 根据Joel Coehoorn的输入解决方案。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Joel Coehoorn    15 年前

    您必须执行两个步骤:

    • 加载控件(您的 this.LoadControl() 打这个电话)
    • 将加载的控件添加到窗体的 Controls 收集。您没有显示任何执行此操作的代码。

    另外,你需要这样做 之前 视图状态将在页面生命周期中恢复,否则将无法按预期工作。因为viewstate是在页面加载事件触发之前恢复的,这意味着您需要在页面初始化或更早的时候恢复它。