wal*_*her 6 c# asp.net event-handling
假设我们有一个非常标准的表单,带有文本框和按钮(为简单起见).您想要处理Click事件并根据用户的输入执行一些操作.
我想知道,重要的是,你何时为代码隐藏中的Click事件连接一个事件处理程序?如果是的话,放在哪里的最佳位置?页面加载?页面初始化?我已经尝试了两个地方,但没有发现任何差异.或者这只是程序员的个人偏好?我已经在互联网上搜索了几次,但没有找到任何满意的答案.
我知道当实际方法执行时,只是不确定接线部分.
Jot*_*aBe 15
如你所知,有几个Page_xxx事件处理程序,像Init,Load,Prerender...在控制存在该事件,并网页以及用户控制(实际上他们得到的形式Control,它包含所有这些事件).
此事件与ASP.NET页面生命周期有关
如果您仔细阅读此链接指向的页面,您将了解何时触发事件.因此,如果您在触发事件之前发生的任何页面生命周期事件中绑定事件处理程序,则可以保证您的事件处理程序将被及时绑定以被触发.
这些是主要的生命周期步骤:
PreInit -> Init -> InitComplete -> PreLoad -> Load -> [Control events] ->
LoadComplete -> PreRender -> SaveStateComplete -> Render -> Unload
Run Code Online (Sandbox Code Playgroud)
并非所有事件都有相关事件,但是,如果有必要,您可以覆盖相应的OnXxx()功能,例如OnPreInit().(这通常仅在自定义服务器控件上完成).
您可以在Page_Init或中绑定事件Page_Load,因为在加载所有控件完成后触发控件事件.该Load步骤以自上而下的方式发生,首先在Page中,然后在所有子控件中递归.
后Load结束,这是引发了第一次活动是更改事件,像TextChanged或SelectionChanged.然后触发所有其他事件,比如Click.
如果您在PreRender或Unload中绑定事件,则不会触发它们.如果你在Init或Load中做过,他们会.
所以看起来在Init或Load中绑定是安全的,但事实并非如此:
它看起来似乎没有特殊的理由来绑定它们,Init或者Load因为它们将在页面生命周期的后期触发.但是,由于在此.aspx期间定义的绑定Init,程序员将期望所有事件已经绑定在Load事件中.如果这个程序员在代码中引发了一个子控件事件,会发生什么?该Load事件发生第一次在控制树的根,并在所有的孩子,递归.因此,当程序员尝试引发子控件的事件时,它将不会被绑定.所以这不会按预期工作.这足以考虑在Load事件中绑定事件的不安全性.这就是为什么你应该总是绑定事件Init.
查看此图以查看Page&children事件的执行顺序: ASP.NET页面生命周期图
| 归档时间: |
|
| 查看次数: |
8394 次 |
| 最近记录: |