动态创建的按钮不起作用

时间:2012-09-26 04:53:24

标签: asp.net events button dynamically-generated

该页面包含linkbutton及其方法:

protected void LinkButton_Click(Object sender, EventArgs e)
  {
        TableRow tr = new TableRow();
        TableCell tc = new TableCell();
        Button b = new Button(); 
        b.Text = "x";
        b.CommandArgument = "someargument";
        b.Click +=new EventHandler(this.b_Click);
        tc.Controls.Add(b);
        tc.Width = 30;
        tr.Controls.Add(tc);
        Table.Rows.Add(tr);
  }

方法:

  protected void b_Click(object sender, EventArgs e)
    {
        ScriptManager.RegisterStartupScript(UpdatePanel1, this.GetType(), "UpdateCom",      "alert('ok');return false;", true);
        string id = (sender as Button).CommandArgument;
        // other operations...

    }

首先点击链接按钮,我在表格中创建按钮,然后当我点击按钮时,b_Click方法不起作用。我甚至没有看到javascript警报,而只是发生页面更新。

什么问题?

请注意,如果我在pageLoad方法中的LinkBut​​tonClick内部进行操作,一切正常,按钮被创建,单击此按钮时b_click也可以。

1 个答案:

答案 0 :(得分:1)

为什么需要在单击按钮时动态构建表?你可以在页面上构建它加载并隐藏它。单击按钮显示它 - 它可以在客户端或服务器端显示;

我的意思是我甚至会把它放在客户端 - 我不喜欢asp.net的东西是回发太多了。从字面上看,它是在隐藏字段中发布表单及其数据,如viewstate,并重新呈现整个页面。对我来说似乎无效 - 您的Web服务器可以执行其他操作,例如提供页面请求,并将此UX处理推迟到客户端浏览器。

<table id="testTable" style="display: none">
  <tr>
     <td width="30px">
        <input id="b" name="b" type="button" value="someargument" text="Click Me!" onclick='alert(this.value);document.getElementById("testTable").style.display="none";' />
     </td>
  </tr>
</table>

在链接按钮中,您可以添加此属性。

onclientclick='document.getElementById("testTable").style.display="inline";' /> // notice I used the single quote on the outside of the onclick.  This would display the table..

如果您仍然需要在popup2按钮上执行某些服务器端操作 - 您可以添加runat =“server”并将onclick更改为onclientclick ...

自从我使用asp.net webforms以来已经有一段时间了,所以请告诉我这是否对您有用....