问题很简单。
是否存在Page.PreLoad存在的技术原因,或者这是否只是方便您可以在加载代码之前整齐地放置始终必须执行的代码?
在PreLoad事件处理程序中添加代码与在Load事件处理程序顶部添加代码之间有区别吗?
您使用PreLoad的典型情况是什么?
谢谢!
答案 0 :(得分:4)
Page_PreLoad和Page_Load之间发生的事情是所有其他 PreLoad事件处理程序(不仅仅是您编写的处理程序)都有机会运行。 没有理由把代码放在Page_PreLoad中。你知道,很可能你确实希望确保所有其他的PreLoad事件处理程序都被解雇了(我将在最后一段)。另外,通过使用Page_Load而不是Page_PreLoad,您可以为控制适配器作者提供覆盖实现行为的机会。
Page.PreLoad事件的目的(据我所知)是为控件作者提供一个钩子。页面生命周期的加载阶段的行为是在其所有子控件上引发之前在页面上引发Load事件。作为控件作者,您可能希望在加载 viewstate之后执行某些操作(因此Init太早),但在调用Page_Load之前(因此Load太晚)。你如何做到这一点是为Page.PreLoad添加一个事件处理程序。
一些内置的ASP.NET数据绑定控件使用此钩子能够在以某种方式更新控件后自动神奇地重新DataBind 在加载其viewstate之后。使用Page.PreLoad中设置的标志,控件可以区分您在Page_Init中所做的更改以及您在Page_Load中所做的更改。如果您实现Page_PreLoad并且不小心避免触及以这种方式挂钩PreLoad的任何控件,您将看到未定义的行为 because you don't know whether PreLoad is firing on the control or on the page first。为避免这种复杂化,请始终使用Page_Load,因为没有理由不这样做。
答案 1 :(得分:2)
我确信我已经回答了几次,但你最好的选择是彻底阅读 ASP.NET Page Lifecycle Overview from Microsoft 和 {{3来自ASP.NET Page Lifecycle的解释
。