好的,这是一个非常烦人的错误,我整个早上都遇到了问题!
我有一个自定义控件,我们在许多项目中都使用了该控件,该控件具有由调用页面 onload 设置并存储在 Viewstate 中的属性。该控件使用自定义控件的 CreateChildControls() 方法上的属性设置子控件。
通常像往常一样在回发时触发 Page_Load 事件,然后触发页面上控件的 CreateChildControls 方法。
奇怪的是,我们在网站上有一个登录系统(自定义成员资格提供程序),当用户登录时,相反的情况首先会触发 CreateChildControls() 方法,然后触发 Page_Load,因此控件属性是错误的(从之前的回发中设置) )
事件如何以不同的顺序触发?我认为无论如何所有页面事件都以相同的顺序发生,而且我看不到登录会如何改变该顺序。
更新:似乎问题是我没有调用 EnsureChildControls() 但我不确定应该在哪里调用它?如果在用于设置子控件的控件上设置了多个属性,我应该何时调用 EnsureChildControls(),我想我不完全理解 EnsureChildControls() 的作用?