Asp.net 为什么动态添加的用户控件的按钮事件没有被触发?
我动态加载了一个-user控件,它有一些提交按钮代码,usercontrol在运行时成功注册,但不要在单击按钮时触发它的提交按钮事件,我缺少什么,有人会告诉我吗 看,这是我的密码Asp.net 为什么动态添加的用户控件的按钮事件没有被触发?,asp.net,Asp.net,我动态加载了一个-user控件,它有一些提交按钮代码,usercontrol在运行时成功注册,但不要在单击按钮时触发它的提交按钮事件,我缺少什么,有人会告诉我吗 看,这是我的密码 switch (ContentTypeID) { case 1: myCtrl = Page.LoadControl("~/Controls/DocumentSpreadSheet.ascx"); if (myC
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">
<input type="image" src="../images/cancel-btn.png" id="MainContent_ctl00_btnCancel" name="ctl00$MainContent$ctl00$btnCancel">
</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属性显示和隐藏它会更简单。