【问题标题】:When to fire a custom control event?何时触发自定义控件事件?
【发布时间】:2010-01-21 23:41:23
【问题描述】:

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

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

您打算什么时候调用自定义控件事件?

【问题讨论】:

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


    【解决方案1】:

    一般来说,一旦您知道基础事件已经发生,您应该立即提出该事件。

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

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

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

    【讨论】:

      【解决方案2】:

      如果你实现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));
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 2013-02-03
        相关资源
        最近更新 更多