在ASP.NET

时间:2017-01-04 14:38:16

标签: asp.net vb.net

我的网页表单上有一个动态数量的按钮。该页面将用作检查表,每个标签有两个按钮(一个用于良好,一个用于不好)。我希望在每个按钮添加到表单时附加一个事件监听器。我已经尝试了几种不同的方式并进行了搜索,但一直无法找到有效的方法。欢迎所有建议!

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

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

2 个答案:

答案 0 :(得分:2)

您还没有创建任何动态按钮,只是您写入客户端的一串文本。因此,FindControl永远不会正常工作,就像分配事件监听器一样。

您可以像这样动态创建按钮:

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

PlaceHolder1.Controls.Add(button);

VB

Dim button As Button = New Button
button.ID = "Button1"
button.Text = "ClickMe"
//attach event
AddHandler button.Click, AddressOf Me.Button1_Click

PlaceHolder1.Controls.Add(button)

ASPX页面示例

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

需要在每个页面加载上创建动态创建的控件,其中包括PostBack

此处有更多信息:http://www.aspsnippets.com/Articles/Dynamic-Controls-Made-Easy-in-ASP.Net.aspx

答案 1 :(得分:1)

您正在尝试使用服务器端代码查找html按钮。这是不可能的。 您应该使用服务器端代码创建所有控件。 我写了一个服务器端的c#iplementation我不擅长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);