我正在创建一个自定义控件。假设我正在重新发明轮子并创建一个派生自 UserControl 类的自定义 Button 控件(仅作为示例)
好吧,它当然有一个Click
事件处理程序。现在我的问题是,我什么时候调用这个事件处理程序?我知道它发生在页面 OnLoad 和 OnLoadComplete 之间的某个时间,但我不太确定我可以连接到什么事件,以便该Click
事件与其他控制事件同时引发。
您打算什么时候调用自定义控件事件?
我正在创建一个自定义控件。假设我正在重新发明轮子并创建一个派生自 UserControl 类的自定义 Button 控件(仅作为示例)
好吧,它当然有一个Click
事件处理程序。现在我的问题是,我什么时候调用这个事件处理程序?我知道它发生在页面 OnLoad 和 OnLoadComplete 之间的某个时间,但我不太确定我可以连接到什么事件,以便该Click
事件与其他控制事件同时引发。
您打算什么时候调用自定义控件事件?
一般来说,一旦您知道潜在事件已经发生,您应该立即提出该事件。
例如,ASP.NET Button 控件如何知道它是被用户点击的?它实现了IPostBackEventHandler和 RaisePostBackEvent() 方法。如果有与控件关联的回发事件数据,则将调用该方法。我相信关联是由它呈现的“名称”属性决定的。然后在 RaisePostBackEvent() 中引发 Click 事件。
您需要回答的问题是:您的控件如何知道它应该引发它的事件?一旦你发现我们剩下的很容易。
如果您的控件与现有的 ASP.NET 控件有相似之处,我建议您逐步浏览 ASP.NET 源代码并了解这些控件是如何工作的。
如果你实现IPostbackEventHandler
,你可以做这样的事情,取自反编译System.Web.Ui.WebControls.Button
protected virtual void RaisePostBackEvent(string eventArgument)
{
base.ValidateEvent(this.UniqueID, eventArgument);
if (this.CausesValidation)
{
this.Page.Validate(this.ValidationGroup);
}
this.OnClick(EventArgs.Empty);
this.OnCommand(new CommandEventArgs(this.CommandName, this.CommandArgument));
}