首页 > 解决方案 > 放入用户控件时,EventHandler 不会触发

问题描述

我有使用事件处理程序呈现删除按钮的代码。将代码放在表单的 .aspx.cs 中,然后触发事件处理程序,一切正常。当我将代码移动到用户控件时,我单击删除按钮并弹出确认消息,不执行任何其他操作。它不运行,您无法在调试器等中运行它。

doDelete278T 函数在用户控件中。

当代码在用户控件中时,为什么 C# 不运行该doDelete278T函数?

代码示例:

try
{
    SqlDataReader r = cmd.ExecuteReader();
    int j = 0;
    short tabby = 32;
    if (r.HasRows)
        pnl_278t.Visible = true;

    while (r.Read())
    {
        LinkButton lbt = new LinkButton();
        lbt.ID = "delete_" + r[_folderName + "_FT278T_UID"].ToString();
        lbt.CausesValidation = false;
        lbt.Text = "X";
        lbt.Click += new EventHandler(doDelete278T);
        lbt.OnClientClick = "return confirm('Are you sure you want to delete this 278T Record?')";
        lbt.TabIndex = tabby++;

        pnl_add278t.Controls.Add(lbt);
        pnl_add278t.Controls.Add(new LiteralControl(" "));
        j++;
    }//end while
    //tbx_278T_count.Text = j.ToString();
}

标签: c#asp.netuser-controls

解决方案


我的实际问题是,当单击按钮时需要运行控件加载逻辑,就像在按钮处理程序位于 aspx.cs 中的页面中一样。

旧 ascx.cs Page_Load protected void Page_Load(object sender, EventArgs e) {

    if (!IsPostBack)
    {
        do278TLoad();
    }
}

新 ascx.cs Page_Load

protected void Page_Load(object sender, EventArgs e)
    {
        _tbx_uid        = (TextBox)this.Parent.Parent.FindControl("pnl_vars").FindControl("tbx_uid");
        if (!IsPostBack)
        {
            if (_tbx_uid.Text != "0")
            {
                do278TLoad();
            }
        }
        else
        {
            do278TLoad();
        }
    }

推荐阅读