【问题标题】:Programmatically changing aspx button Click event on the Form Page_Load inconsistency以编程方式更改窗体上的 aspx 按钮 Click 事件 Page_Load 不一致
【发布时间】:2021-11-09 21:25:54
【问题描述】:

我的行为不一致。我需要更改用户控件的按钮 Click 事件。我有两个按钮,我对控件所做的所有更改都可以正常工作,但是只有一个 Click 事件不会更改:

((Button)EntryControl.FindControl("CancelConfirmation").FindControl("btnYesCancel")).Click += new EventHandler(btnYesCancelTrade_Click);

所有其他更改都可以正常工作:

    protected void Page_Load(object sender, EventArgs e)
    {
        ((Label)EntryControl.FindControl("lbPurchaseDate")).Visible = false;
        ((TextBox)EntryControl.FindControl("txPurchaseDate")).Visible = false;
        ((Label)EntryControl.FindControl("lbPurchasePrice")).Visible = false;
        ((TextBox)EntryControl.FindControl("txPurchasePrice")).Visible = false;

        ((Button)EntryControl.FindControl("CancelConfirmation").FindControl("btnNoCancel")).Click += new EventHandler(btnNoCancelTrade_Click);
        /*does not work*/ ((Button)EntryControl.FindControl("CancelConfirmation").FindControl("btnYesCancel")).Click += new EventHandler(btnYesCancelTrade_Click);
        ((Button)EntryControl.FindControl("CancelConfirmation").FindControl("btnYesCancel")).Text = "Yes Test";
    }

我错过了什么吗?

【问题讨论】:

  • 这是动态添加的按钮吗?还是它是标记 (aspx.cs) 的一部分?
  • 控件是通过标记设置的。我在应用程序的不同区域重用控件,我需要使用不同的处理程序,所以在 webform page_load 中我正在进行更改,奇怪的是,另一个按钮在我更改后工作正常, 与按钮的设置方式相同,即使 Text 发生了更改,也不会更改 Click 处理程序。
  • 没关系,在注册新的处理程序之前,我必须取消注册原始处理程序。所以我在控件中创建了几个方法,这样 Web 表单就可以做到这一点:
  • public void deregisterBtnYesCancel_Click() { btnYesCancel.Click -= btnYesCancel_Click; } public void deregisterBtnNoCancel_Click() { btnNoCancel.Click -= btnNoCancel_Click; }

标签: asp.net button click eventhandler


【解决方案1】:

我错过了我必须取消注册原始处理程序。

【讨论】:

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