C# 通用事件处理程序不从动态按钮触发
我有一堆动态创建的按钮,并将其单击事件设置为事件处理程序…当我运行它时,它们处理程序从不触发,我已经完成了代码,似乎没有什么异常,但它就是不会触发 下面是创建按钮的代码片段C# 通用事件处理程序不从动态按钮触发,c#,asp.net,webforms,C#,Asp.net,Webforms,我有一堆动态创建的按钮,并将其单击事件设置为事件处理程序…当我运行它时,它们处理程序从不触发,我已经完成了代码,似乎没有什么异常,但它就是不会触发 下面是创建按钮的代码片段 for (cellCtr = 1; cellCtr <= 9; cellCtr++) { Button button = new Button(); HyperLink link = new HyperLink();
for (cellCtr = 1; cellCtr <= 9; cellCtr++)
{
Button button = new Button();
HyperLink link = new HyperLink();
TableCell tCell = new TableCell();
if (rowCtr == rN)
break;
string myStr = daccess.dsSubjects.Tables[0].Rows[rowCtr]["SubjectName"].ToString();
int myID = Convert.ToInt32(daccess.dsSubjects.Tables[0].Rows[rowCtr]["SubjectID"].ToString());
button.ID = Convert.ToString(myID);
button.Text = myStr;
button.CssClass = "btn btn-primary btn-sm";
button.Click += ButtonSubjectClick;
tCell.Controls.Add(button);
tRow.Cells.Add(tCell);
rowCtr++;
if (cellCtr == rN)
{
rowCtr = rowCtr - 1;
break;
}
}
当它运行时,源代码如下所示
<input type="submit" name="38" value="Math" id="38" class="btn btn-primary btn-sm" />
此代码适用于我:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// do something if needed
}
// outside of postback, you need to add it each time
Button button = new Button();
button.ID = "btn1";
button.Text = "clicky me";
button.Click += new EventHandler(ButtonSubjectClick);
pnl.Controls.Add(button);
}
void ButtonSubjectClick(object sender, EventArgs e)
{
Button button = (Button)sender;
button.Text = "clicked me";
}
我相信这是一个关于如何将按钮添加到页面的问题。我在每次回发时都会添加我的按钮,因此服务器会对其进行注册
如果要在其他事件中添加按钮,则可以使用viewstate或会话变量,存储某种标志来创建按钮,然后在每次回发中检查该标志
编辑,为了清晰起见,pnl是我页面上的一个面板:
<form id="form1" runat="server">
<div>
<asp:Panel ID="pnl" runat="server"></asp:Panel>
</div>
</form>
是否尝试将按钮对象单击
设置为静态方法?我是根据MSDN的样品做的,我自己还没试过。我不确定,我想我没有试过。我以前遇到过这个问题,我找到了答案,但我不知道我做了什么来解决它。我在点击按钮时创建了这些按钮。也就是说,我有6个按钮,每个按钮在点击时,都会根据我的数据库中的值生成相应的按钮,当点击任何一个动态按钮时,它应该运行其处理程序来删除该记录是的,但您必须确保在每次页面加载时将这些按钮添加到控制树中,包括点击这些动态按钮的时间。(回复OP,Hardrada是正确的)这将不起作用,因为按钮在页面生命周期中生成得太晚,因此当您单击一个按钮时,服务器不知道该按钮,并且忽略其单击事件。最好的解决办法是,正如我在帖子中指出的那样;在原始按钮上,单击生成会话变量,即会话[“createBtn1”]=“是”;然后在页面中询问自己是否(会话[“createBtn1”]!=null),然后创建此按钮。
<form id="form1" runat="server">
<div>
<asp:Panel ID="pnl" runat="server"></asp:Panel>
</div>
</form>