【问题标题】:Dynamic usercontrol postback initialization动态用户控件回发初始化
【发布时间】:2009-10-08 13:47:51
【问题描述】:

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

现在要执行此操作,因为它们是 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 的意见解决。

【问题讨论】:

    标签: asp.net postback


    【解决方案1】:

    你必须做两个步骤:

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

    此外,您需要在页面生命周期中恢复视图状态之前执行此操作,否则事情将无法按预期工作。由于视图状态在 Page_Load 事件触发之前已恢复,这意味着您需要在 Page_Init 或更早的时间执行此操作。

    【讨论】:

    • 啊,你是对的,出于好奇,从最佳实践的角度来看,保存控件 ID 的最佳方法是什么?
    • ClientID 还是普通的服务器端 ID?如果它是服务器 ID,那么只需确保在回发时以与创建它时相同的方式设置它。
    • 问题是用户可以选择动态添加的控件,所以我不能指望以同样的方式创建它。
    • 你必须记住他们上次选择了什么。
    猜你喜欢
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多