何时触发自定义控件事件?

时间:2010-01-21 23:41:24

标签: c# asp.net events page-lifecycle

我正在创建一个自定义控件。假设我正在重新发明轮子并创建一个派生自UserControl类的自定义Button控件(仅用于示例)

嗯,它当然有一个Click事件处理程序。现在我的问题是,我什么时候调用这个事件处理程序?我知道它发生在Pages OnLoad和OnLoadComplete之间的某个时间,但是我不太确定我可以连接到什么事件,以便Click事件与其他控制事件同时引发。

您打算何时调用自定义控件事件?

2 个答案:

答案 0 :(得分:2)

一般情况下,您应该在知道基础事件发生后立即举起事件。

例如,ASP.NET Button控件如何知道它被用户单击了?它实现了IPostBackEventHandler和RaisePostBackEvent()方法。如果存在与控件关联的回发事件数据,则将调用该方法。我相信该关联是由它呈现的“name”属性决定的。在RaisePostBackEvent()中,它然后引发Click事件。

你需要回答的问题是:你的控制如何知道它应该提升它的事件?一旦你发现我们的其余部分很容易。

如果您的控件与现有的ASP.NET控件有相似之处,我建议stepping through the ASP.NET source code并查看这些控件的工作原理。

答案 1 :(得分:1)

如果您实施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));
}