【问题标题】:Web forms UserControls - LoadControl in pre-init or page_load?Web 表单 UserControls - 预初始化或 page_load 中的 LoadControl?
【发布时间】:2011-12-11 16:29:04
【问题描述】:

MSDN page lifecycle reference 中声明 pre-init 用于“创建或重新创建动态控件”。

但是,elsewhere on MSDN,一个示例暗示应该在 Page_Load 中加载动态用户控件

这是矛盾的吗?还是 pre-init 仅用于标准 aspx 控件?

我错过了什么:)

编辑: 然而,无论哪种方式都有效,但一种方法可能比另一种方法有一些好处。

(WebUserControl1 是一个带有简单标签属性的 UserControl,SomeProperty

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);
    WebUserControl1 wc1 = LoadControl(@"~\WebUserControl1.ascx") as WebUserControl1;
    wc1.SomeProperty = "Hello World";
    Controls.Add(wc1);
}

protected void Page_Load(object sender, EventArgs e)
{
    WebUserControl1 wc1 = LoadControl(@"~\WebUserControl1.ascx") as WebUserControl1;
    wc1.SomeProperty = "Hello World";
    Controls.Add(wc1);
}

【问题讨论】:

    标签: asp.net user-controls webforms page-lifecycle


    【解决方案1】:

    你到底想做什么?您是否试图将信息传递给用户控件?如果是这样,您可以在父页面的 page_load 事件中将信息传递给用户控件。

    【讨论】:

    • 属性也可以在PreInit中的控件上设置。差异可能与视图状态跟踪有关。
    【解决方案2】:

    答案是这取决于您的自定义控件。如果您的用户控件在 page_load 之前不需要发生任何事情,那么您可以继续在页面加载期间添加您的控件,如果您的用户控件中有代码在更早的时间执行,那么您应该在正如 MSDN 文章所建议的那样,处于早期阶段。

    【讨论】:

    • 同意,具体来说,虽然可以在 OnPreInit 中创建 (LoadControl) 控件,但它不能“添加”到任何东西(因为不能保证存在其他控件,例如 Form 等)。而且由于不一定要将动态控件保留为页面的成员变量(否则为什么需要动态创建它 - 我猜是异常是一个集合)因此倾向于在​​生命周期的后期创建控件。由于控件将“赶上”丢失的生命周期事件,因此应该没有副作用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    相关资源
    最近更新 更多