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