问题很简单。
Page.PreLoad 的存在是否有技术原因,或者这只是方便您可以整齐地放置始终必须在 Load 代码之前执行的代码?
在 PreLoad 事件处理程序中添加代码与在 Load 事件处理程序顶部添加代码之间有区别吗?
使用 PreLoad 的典型场景是什么?
谢谢!
Page_PreLoad 和 Page_Load 之间发生的情况是,所有其他PreLoad 事件处理程序(不仅仅是您编写的处理程序)都有机会运行。没有理由将代码放入 Page_PreLoad 中。您看,您可能确实希望确保所有其他 PreLoad 事件处理程序都已触发(我将在最后一段中解释)。另外,通过使用 Page_Load 而不是 Page_PreLoad,您可以为控制适配器作者提供覆盖实现行为的机会。
Page.PreLoad 事件的目的(据我所知)是为控件作者提供一个钩子。页面生命周期的加载阶段的行为是,在页面上引发 Load 事件,然后在其所有子控件上引发该事件。作为控件作者,您可能希望在加载视图状态之后(因此 Init 太早)但在调用 Page_Load 之前(因此 Load 太晚)执行一些操作。方法是将事件处理程序添加到 Page.PreLoad。
当您在加载视图状态后以某些方式更新控件时,某些内置 ASP.NET 数据绑定控件使用此挂钩能够自动神奇地重新 DataBind 本身。使用 Page.PreLoad 中设置的标志,控件可以区分在 Page_Init 中所做的更改和在 Page_Load 中所做的更改。如果您实现 Page_PreLoad 并且不注意避免接触以这种方式挂钩 PreLoad 的任何控件,您将看到未定义的行为 ,因为您不知道 PreLoad 是首先在控件上触发还是在页面上触发。为了避免这种复杂情况,请始终使用 Page_Load,因为没有理由不这样做。