通用事件处理程序不从动态按钮触发

时间:2014-03-22 14:21:41

标签: c# asp.net webforms

我有一堆动态创建的按钮,并将其click事件设置为事件处理程序......当我运行它时,它们处理从不触发,我已经逐步完成代码并且似乎没有什么不寻常的但是它只是不会开枪。

以下是创建按钮的代码片段。

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;
                }
            }

这里是它想要调用的处理程序......

void ButtonSubjectClick(object sender, EventArgs e)
    {
        Button button = (Button)sender;
        daccess.DeleteSubjects(Int32.Parse(button.ID.ToString()));
        button.CssClass = "btn-active";  
    }

当它运行时,源看起来像这样

<input type="submit" name="38" value="Math" id="38" class="btn btn-primary btn-sm" />

1 个答案:

答案 0 :(得分:0)

此代码适用于我:

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";
}

我认为这是一个关于如何将按钮添加到页面的问题。我在每个回发时都添加了我的按钮,因此它由服务器注册。

如果要在另一个事件中添加按钮,则可以使用视图状态或会话变量,存储某种标志以创建按钮,然后在每个回发中检查此标志。

编辑,为了清楚起见,pnl是我页面上的Panel:

<form id="form1" runat="server">
<div>
    <asp:Panel ID="pnl" runat="server"></asp:Panel>
</div>
</form>