根据 MSDN,我们应该使用PreInit()
事件来创建或重新创建动态控件。
并且Init()
应该使用事件来初始化控件属性。
PreInit()
我的问题是,如果我们初始化控件属性而不是,会不会有一些问题Init()
?如果没有问题,那么我们应该出于什么目的使用该OnInit()
事件?
以下是 MSDN 页面生命周期链接,其中说明了这一点:
根据 MSDN,我们应该使用PreInit()
事件来创建或重新创建动态控件。
并且Init()
应该使用事件来初始化控件属性。
PreInit()
我的问题是,如果我们初始化控件属性而不是,会不会有一些问题Init()
?如果没有问题,那么我们应该出于什么目的使用该OnInit()
事件?
以下是 MSDN 页面生命周期链接,其中说明了这一点:
一个原因是,如果您的自定义控件在OnInit阶段构建其子级,并且如果它需要一些数据(属性)来构建这些控件,则您不能从页面的OnInit阶段分配该属性,因为OnInit的调用顺序是从最低的叶子控制页面。
因此,您可以将属性分配给控件的唯一位置(在代码隐藏中),该控件依赖于某些提供的数据在其OnInit中构建子项,位于页面的PreInit中。
你的问题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
最后一个视图状态之后,您无法访问任何控件属性。假设您在文本框控件中输入一些文本,然后单击进行回发的按钮控件,现在您要查看最新输入的值。在这种情况下,您将能够看到您在InitComplete
ie in之后输入的文本框值,因为视图状态是在事件之后PreLoad
完全加载的。PreLoad
因此,现在您可以说,如果您在事件中设置任何控件属性,则有可能在引发下一个事件并打开视图状态更改的跟踪Init
时将其覆盖InitComplete