将事件侦听器分配给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);