将事件侦听器分配给ASP.NET中动态创建的HTML按钮

将事件侦听器分配给ASP.NET中动态创建的HTML按钮,asp.net,vb.net,Asp.net,Vb.net,我有一个网页表单,页面上有大量动态按钮。该页面将用作一个检查表,每个标签有两个按钮(一个是好的,一个是坏的)。我希望在将每个按钮添加到表单中时为它们附加一个事件侦听器。我尝试了几种不同的方法,到处搜索,但都找不到任何有效的方法。欢迎大家提出建议 For i = 0 To ds.Tables(0).Rows.Count - 1 Response.Write("<tr style='height:60px'>") Response.Write("<td style=

我有一个网页表单,页面上有大量动态按钮。该页面将用作一个检查表,每个标签有两个按钮(一个是好的,一个是坏的)。我希望在将每个按钮添加到表单中时为它们附加一个事件侦听器。我尝试了几种不同的方法,到处搜索,但都找不到任何有效的方法。欢迎大家提出建议

For i = 0 To ds.Tables(0).Rows.Count - 1
    Response.Write("<tr style='height:60px'>")
    Response.Write("<td style='text-align:left; width:60%;'>")
    Response.Write("<label ID='lbl" & i & "' style='font-size:40px;'>" & ds.Tables("Issues").Rows(i).Item("Issue") & "</label>")
    Response.Write("</td>")
    Response.Write("<td style='text-align:left; width:20%'>")
    Response.Write("<button ID='btnOK" & i & "' style='font-size:25px; width:100%; height:100%;' type='button'>OK</button>")
    Response.Write("</td>")
    Response.Write("<td style='text-align:left; width:20%'>")
    Response.Write("<button ID='btnNG" & i & "' style='font-size:25px; width:100%; height:100%;' type='button'>N/G</button>")
    Response.Write("</td>")
    Response.Write("</tr>")

    Dim btnOK As Button = FindControl("btnOK" & i)
    Dim btnNG As Button = FindControl("btnNG" & i)

    'AddHandler btnOK.Click, AddressOf Me.btnOK_Click
Next
从i=0到ds.Tables(0).Rows.Count-1的

回答。写(“”)
回答。写(“”)
Response.Write(“&ds.Tables(“问题”)。行(i)。项(“问题”)&”)
回答。写(“”)
回答。写(“”)
回答。写下(“OK”)
回答。写(“”)
回答。写(“”)
答复。填写(“N/G”)
回答。写(“”)
回答。写(“”)
尺寸btnOK As按钮=FindControl(“btnOK”&i)
尺寸btnNG As按钮=FindControl(“btnNG”&i)
'AddHandler btnOK.Click,AddressOf Me.btnOK\u Click
下一个

当前使用此代码时,
FindControl
函数不返回任何内容。

您没有创建任何动态按钮,只是向客户端写入一个文本字符串。因此,您的
FindControl
将永远无法工作,就像分配事件侦听器一样

动态创建按钮,如下所示:

Button button = new Button();
button.ID = "Button1";
button.Text = "ClickMe";
//attach event
button.Click += new EventHandler(Button1_Click);

PlaceHolder1.Controls.Add(button);
VB

ASPX页面示例

<table>
    <tr style="height: 60px">
        <td>
            <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
        </td>
    </tr>
</table>


您正在尝试查找带有服务器端代码的html按钮。这是不可能的。 您应该使用服务器端代码创建所有控件。 我写了一个服务器端的c#I实现,我不擅长vb

    Table tbl = new Table();
    TableRow tr = null;
    TableCell cell = null;

    int rows = dt.Rows.Count;
    int cols = dt.Columns.Count;


    TableHeaderRow htr = new TableHeaderRow();
    TableHeaderCell hcell = null;
    for (int i = 0; i < cols; i++)
    {
        hcell = new TableHeaderCell();
        hcell.Text = dt.Columns[i].ColumnName.ToString();
        htr.Cells.Add(hcell);

    }
    tbl.Rows.Add(htr);


    for (int j = 0; j < rows; j++)
    {
        tr = new TableRow();
        for (int k = 0; k < cols; k++)
        {
            cell = new TableCell();
            cell.Text = dt.Rows[j][k].ToString();
            Button btn = new Button();
            btn.ID = "btnOK" + j;
            cell.Controls.Add(btn);
            btn.onclick = eventHandler //Handler comes here
            tr.Cells.Add(cell);

        }
        tbl.Rows.Add(tr);
    }

    yourHtmlDiv.controls.add(table);
表格tbl=新表格();
TableRow tr=null;
TableCell=null;
int rows=dt.rows.Count;
int cols=dt.Columns.Count;
TableHeaderRow htr=新的TableHeaderRow();
TableHeaderCell hcell=null;
for(int i=0;i
看起来使用中继器可以完成这项工作。
    Table tbl = new Table();
    TableRow tr = null;
    TableCell cell = null;

    int rows = dt.Rows.Count;
    int cols = dt.Columns.Count;


    TableHeaderRow htr = new TableHeaderRow();
    TableHeaderCell hcell = null;
    for (int i = 0; i < cols; i++)
    {
        hcell = new TableHeaderCell();
        hcell.Text = dt.Columns[i].ColumnName.ToString();
        htr.Cells.Add(hcell);

    }
    tbl.Rows.Add(htr);


    for (int j = 0; j < rows; j++)
    {
        tr = new TableRow();
        for (int k = 0; k < cols; k++)
        {
            cell = new TableCell();
            cell.Text = dt.Rows[j][k].ToString();
            Button btn = new Button();
            btn.ID = "btnOK" + j;
            cell.Controls.Add(btn);
            btn.onclick = eventHandler //Handler comes here
            tr.Cells.Add(cell);

        }
        tbl.Rows.Add(tr);
    }

    yourHtmlDiv.controls.add(table);