当前位置 : 主页 > 网络编程 > ASP >

asp.net按钮事件没有触发

来源:互联网 收集:自由互联 发布时间:2021-06-24
我有个问题.当我从代码后面添加一个事件处理程序到一个按钮时,事件永远不会被触发.但是当我在创建按钮标签时添加它时,它完美地工作,我从后面的代码创建按钮,然后将其添加到表中
我有个问题.当我从代码后面添加一个事件处理程序到一个按钮时,事件永远不会被触发.但是当我在创建按钮标签时添加它时,它完美地工作,我从后面的代码创建按钮,然后将其添加到表中.

<form id="form1" runat="server">
    <div>                       
        <asp:Button ID="Button1" runat="server" Text="show table" OnClick="Button1_OnClick" />
        <table border="1">
            <thead>
                <tr>
                </tr>
            </thead>
            <tbody id="tbody" runat="server">

            </tbody>
        </table>
    </div>
</form>


protected void Button1_OnClick(object sender, EventArgs e)
{
  var row = new TableRow(); 
  var btnDownload = new Button { ID = "ID", Text = "Click Here" };
  btnDownload.Click += ClickEvent;
  var cell = new TableCell();
  cell.Controls.Add(btnDownload);
  row.Controls.Add(cell);
  tbody.Controls.Add(row);
}
protected void ClickEvent(object sender, EventArgs e)
{
  Debug.WriteLine(((Button)sender).Text);
}
这个问题的答案在于理解ASP.NET页面生命周期. ASP.NET在回发时重建页面的服务器实例.一旦服务器完成处理并且响应被发送回客户端,服务器实例将永久销毁,并且只能使用浏览器中包含的数据(查看数据/ cookie等)和剩余服务器数据的组合来重新创建(会话/缓存).

您正在连接Button1_OnClick事件处理程序中动态按钮的单击事件.当ASP.NET尝试在下一个回发时重建页面时,它不会运行此事件处理程序(因为没有单击Button1),因此事件处理程序将永远不会被连线,这解释了它从未运行的原因.您需要在Page_Load处理程序中或之前连接任何事件处理程序,以捕获控件事件处理程序.

网友评论