有没有办法检查在 asp.net webforms 页面/控件生命周期中触发了哪些事件?
我知道我可以为每个事件手动添加处理程序,但这似乎有点……效率低下。
是否有可视化工具或我可以检查的属性来告诉我这些事件是否已触发?
编辑 我想知道这一点的原因是我正在覆盖自定义控件的 ViewState 属性,并且视图状态在某些时候消失了,我想知道它在页面生命周期中的哪个点被覆盖。
事件在 .NET 中的工作方式是您注册您对它们感兴趣,并且框架将在它们被触发时调用您的处理程序。我不知道有任何可视化工具或属性可以告诉您您在生命周期中的位置,除了知道您在哪里。
在 MSDN 上,ASP.NET 页面生命周期概述很好地描述了何时发生的事情,并且由于您在页面或控件上所做的一切都将作为这些事件之一的处理程序的一部分,您应该能够工作在这个过程中你在哪里。
编辑以添加
一旦所有控件等完成将其详细信息保存到 ViewState,就会引发SaveStateComplete事件——这可能是您的代码应该去的地方。
到那时,控件可以对 ViewState 进行更改 - 通常会在PreRender事件中进行(在 SaveStateComplete 之前触发)。
你正在做什么样的改变?
页面和控制事件以非常严格、非常可预测的方式触发。Page 和所有控件在处理下一个事件之前处理一个事件。因此,如果您将代码放在 Page 中,您就可以确切地知道所有关联控件中发生了什么。
但是,直接覆盖 ViewState 并不安全;控制取决于它。相反,您可能会查看覆盖SavePageStateToPersistenceMedium()
和LoadPageStateFromPersistenceMedium()
在页面上;它们让您对 ViewState 的最终配置有很大的控制权。
如果有帮助,我会在我的书中介绍这些方法和其他相关优化:Ultra-Fast ASP.NET。
再一次,我在回答我自己的问题。
我想做的是确定在页面生命周期中触发了哪些事件。
这实际上很简单:在 web.config 中启用跟踪,然后转到 ~/Trace.axd 以查看触发了什么。