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