【问题标题】:When Are Custom Event Handlers Attached?何时附加自定义事件处理程序?
【发布时间】:2010-09-23 04:38:51
【问题描述】:

我在 GridView 中有一个 UserControl。 自定义事件处理程序何时附加到 UserControl ? 请告诉我,因为我不知道。

在下面的场景中,在触发 UserCreated 事件时,即在 DataBinding 期间,UserCreated 事件处理程序为空。一旦页面完全加载,事件处理程序就可用。

用户控制

    public event EventHandler UserCreated;
    public event EventHandler UserSelected;

     /// 
    /// Bubble up the  UserCreated event
    /// 
    protected virtual void OnUserCreated(object sender, UserCreatedArgs e)
    {
        EventHandler handler = UserCreated;
       /* 
            UserCreated above is null during databinding. No handler is present
            A handler is present after page has fully loaded i.e. UserCreated != null
        */

        if (handler != null)
        {
            handler(this, e);
        }
    }

    /// 
    /// Raise the OnDataBindingEvent
    /// 
    protected override void OnDataBinding(EventArgs e)
    {            
        base.OnDataBinding(e);
        InitialiseControl();
    }

    /// 
    /// Initialises the data in the UserControl.
    /// 
    private void InitialiseControl()
    {           
       List userList =
            UserController.GenerateUserNameDropDownList(UserGroupName);
       OnUserCreated(userList);
    }

托管用户控件的页面

   /// 
    /// Handles the Load event of the Page control.
    /// 
    protected void Page_Load(object sender, EventArgs e)
    {
         UserCreatedHandler += UserControl.UserCreated
    }

    protected void UserCreatedHandler(object sender, UserControl.UserCreatedArgs e)
    {
          ...handle userCreated event
    }

页面标记

asp:GridView ID="keyPersonnelGridView" runat="server" 列 asp:模板字段 项目模板 userControl:UserName ID="personnelList" runat="server" UserGroupName="All Users" /项目模板 /asp:模板字段 ..其余标签关闭 /asp:GridView

任何善良的人都可以解释为什么我的事件处理程序在事件触发时不存在吗?

【问题讨论】:

标签: asp.net event-handling


【解决方案1】:

你需要翻转它

UserCreatedHandler += UserControl.UserCreated

变成

UserControl.UserCreated += new EventHandler(UserCreatedHandler); 

目前,“UserCreatedHandler”的 UserCreated 事件签名错误。当你声明 UserCreated 事件时,你应该使用通用的 EventHandler:

public event EventHandler<UserCreatedArgs> UserCreated;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多