3

根据 MSDN,我们应该使用PreInit()事件来创建或重新创建动态控件。

并且Init()应该使用事件来初始化控件属性。

PreInit()我的问题是,如果我们初始化控件属性而不是,会不会有一些问题Init()?如果没有问题,那么我们应该出于什么目的使用该OnInit()事件?

以下是 MSDN 页面生命周期链接,其中说明了这一点:

http://msdn.microsoft.com/en-us/library/ms178472.aspx

4

2 回答 2

2

一个原因是,如果您的自定义控件在OnInit阶段构建其子级,并且如果它需要一些数据(属性)来构建这些控件,则您不能从页面的OnInit阶段分配该属性,因为OnInit的调用顺序是从最低的叶子控制页面。

因此,您可以将属性分配给控件的唯一位置(在代码隐藏中),该控件依赖于某些提供的数据在其OnInit中构建子项,位于页面的PreInit中。

于 2013-09-23T16:52:29.393 回答
1

你的问题1

will there be some issue if we initialize the control properties in PreInit()
instead of Init()

PreInit()事件中,控件还没有完全初始化,所以不建议使用该事件来设置控件属性。

问题2: for what purpose should we use the OnInit() event

如果问题 1 很清楚,那么您同意您将OnInit()按照 MSDN 所说的那样初始化 Control 属性。

此外,还有一些关于Init事件和控件属性的重要内容需要了解。

Init最后一个视图状态之后,您无法访问任何控件属性。假设您在文本框控件中输入一些文本,然后单击进行回发的按钮控件,现在您要查看最新输入的值。在这种情况下,您将能够看到您在InitCompleteie in之后输入的文本框值,因为视图状态是在事件之后PreLoad完全加载的。PreLoad

因此,现在您可以说,如果您在事件中设置任何控件属性,则有可能在引发下一个事件并打开视图状态更改的跟踪Init时将其覆盖InitComplete

于 2013-09-02T11:28:14.807 回答