我试图充分了解的WebForm事件模型(而不是页面的生命周期,但如何当在.aspx或.ascx文件声明指定的事件时接线。
举个例子Button控件。 它可以在代码隐藏丝Click事件,但它在.aspx / .ascx文件的“点击”事件。
我用.net反射和Button控件有一个受保护的OnClick方法,但不应该提供给通过在.aspx /的.ascx分配。 除非我失去了一些东西。
有谁知道为什么添加了“开”字头?
我只想澄清一点:我理解的命名约定的工作。 我想知道如何“onclick”事件在.aspx /的.ascx被翻译成。点击+ =新的EventHandler(blahName); 也就是说,如果我创建了一个ControlChanged事件处理程序,做我需要做什么特别的事情来获得OnControlChanged露面有效地在.aspx / .ascx文件?
它比一个命名约定更多的是因为用户控件的事件自动获得在声明语法“开”前缀。
例如,我有一个声明事件ProjectSelected一个用户控件。 要添加一个声明处理程序,我设置了OnProjectSelected属性。
用户控件:
public event EventHandler<ProjectSelectedEventArgs> ProjectSelected;
添加处理程序声明:
<user:ProjectList id="uxProjectList" runat="server"
OnProjectSelected="uxProjectList_ProjectSelected" />
在代码中添加处理程序背后:
uxProjectList.ProjectSelected += uxProjectList_ProjectSelected;
这混淆了地狱了我两次,第一次时,我无法弄清楚,为什么事件是不可声明,并再次当我命名事件“OnProjectSelected”和属性变成了“OnOnProjectSelected”。
这些商店引用代表调用代码将使用事件连接最多; 为了事件本身,和委托之间进行区分。
引发事件的时候,它只是一个命名约定使用。 OnSomethingHappened ...的OnClick,的OnChange,OnClose中。 我不认为这有什么神奇或阴险,它只是一个约定。
语义它基本上是一个古老的倒退到VB的传统,其中的事件监听器被通常称为OnWhatever。 旧习难改。