Asp.net 为什么动态添加的用户控件的按钮事件没有被触发?

Asp.net 为什么动态添加的用户控件的按钮事件没有被触发?,asp.net,Asp.net,我动态加载了一个-user控件,它有一些提交按钮代码,usercontrol在运行时成功注册,但不要在单击按钮时触发它的提交按钮事件,我缺少什么,有人会告诉我吗 看,这是我的密码 switch (ContentTypeID) { case 1: myCtrl = Page.LoadControl("~/Controls/DocumentSpreadSheet.ascx"); if (myC

我动态加载了一个-user控件,它有一些提交按钮代码,usercontrol在运行时成功注册,但不要在单击按钮时触发它的提交按钮事件,我缺少什么,有人会告诉我吗

看,这是我的密码

 switch (ContentTypeID)
        {
            case 1:
                myCtrl = Page.LoadControl("~/Controls/DocumentSpreadSheet.ascx");

                if (myCtrl != null)
                {
                    ((Controls_DocumentSpreadSheet)myCtrl).ddlList = int.Parse(ddlList.SelectedValue);
                    pnlDetails.Controls.Add(myCtrl);
                }
                break;
            case 2:
现在,在运行时注册的用户控件有一些按钮,其中包含以下事件

 protected void btnSave_Click(object sender, EventArgs e)
    {
        if (checkRequiredFields(true) == true)
        {
            saveContentDetails();
            btnCancel_Click(null, null);
            //   loadSummaryGrid(true);
        }
        else
        {
            showMessageBox("Invalid data; please correct all errors.");
        }

    }
此事件未被触发,我已附加断点并观察它

渲染加价

<div id="MainContent_ctl00_divButtons">
    <table cellspacing="0" cellpadding="0" border="0" style="width: 97%;
        margin: 10px;" id="Table3">
        <tbody><tr>
            <td align="center" colspan="4">
                <input type="image" src="../images/submit_btn.png" id="MainContent_ctl00_btnInsert" name="ctl00$MainContent$ctl00$btnInsert">
                &nbsp;
                <input type="image" src="../images/cancel-btn.png" id="MainContent_ctl00_btnCancel" name="ctl00$MainContent$ctl00$btnCancel">
                &nbsp;
            </td>
        </tr>
        <tr>
            <td>

            </td>
        </tr>
    </tbody></table>
</div>
实际加价

简单回答:添加控件太晚了

如果要接受按钮单击,则应在loadComplete之前添加用户控件。理想情况下,您应该将其添加到Init,或者如果它依赖于某些输入,则将其添加到Load事件中

如果在按钮单击事件之类的事件上添加控件,它将呈现良好效果。但您将不会收到该控件上的任何事件

在html中的隐藏元素中设置的事件目标将在LoadComplete后进行计算。 如果您的控件在求值时不存在,它将不会接收事件

您需要了解的是,grid的ItemCommand事件只触发一次,不会在下一次回发时触发。您需要记住,您已经添加了该控件,并在每次回发时再次添加该控件,直到您需要它为止。记住这一点的最佳位置是ViewState


应在ViewState中设置一个变量,该变量指示当前正在显示该特定控件,并使用该变量在加载时添加该控件。您无法在Init上执行此操作,因为ViewState在Init上不可用。

不幸的是,所有通灵师今天都不在,所以您可以通过编辑您的问题给我们一些代码来查看吗?提交按钮始终是“回发邮件”-您的意思可能是这不是在代码背后调用函数?请在此处提供您的代码以获得真正的帮助。您是否在任何回发时向页面添加相同的用户控件?您是否已将btnSave_Click注册为Click事件的处理程序?您能给我们看一下.ascx标记中的按钮吗?不是呈现的HTML,但源标记是我做的,请参见上面的代码。但是如何在加载事件时修复它,我正在网格的ItemCommand事件上添加控件请参见编辑的答案。您需要跟踪这些控件的添加。Asp.net会在每次请求时将所需的所有控件添加到控件集合中。我还将提到,您可能会发现,始终添加控件并在需要时使用其Visible属性显示和隐藏它会更简单。