asp.net 按钮事件未触发

标签 asp.net events code-behind buttonclick

我有一个问题。当我将事件处理程序从代码隐藏添加到按钮时,该事件永远不会被触发。但是当我在创建按钮标签时添加它时,它工作得很好,并且我从后面的代码创建按钮并将其添加到表中。

<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);
}

最佳答案

请不要接受这个答案,chappoo 回答了您的问题

由于事件被触发一次,因此您的控件将仅存在一次,并将在下一个 PostBack 处消失。您不应在 PostBack 事件中创建/删除控件。 Dynamic server controls must be created during the Init of the page

以下是一些了解 ASP.NET 和 ASP.NET MVC“生命周期”的链接。

ASP.NET

您可以看到,任何控件都必须存在于页面的 Load 期间才能引发控件事件 ( RaiseChangedEvents ) 和回发事件 ( RaisePostBackEvent )。例如,页面子控件和控件子控件在页面 CreateChildControls 之后创建( OnPreRender )、数据绑定(bind)(在 RenderControl 之后)并呈现( Load )。有时,有些开发者在页面EnsureChildControls中调用Load来预加载子控件。

http://msdn.microsoft.com/en-us/library/ms178472.aspx ASP.NET Page LifeCycle

ASP.NET MVC

“生命周期”纯粹用于请求处理。操作( Controller )独立于渲染( View )。

ASP.Net MVC - Request Life Cycle

http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/entrypage/be-ahead-of-the-game-poster1 ASP.NET MVC 'life cycle'

关于asp.net 按钮事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18120203/

相关文章:

wpf - PowerShell 可以用作 WPF 的代码吗

visual-studio - 如何配置 Visual Studio (2010) 在默认情况下双击打开代码隐藏的 aspx 页面?

c# - 查询- LINQ,2 个表,联合

excel - 如果字符计数器大于 100,则更改字体大小的事件

javascript - dojo如何覆盖事件处理程序

c++ - 重置线程事件 - C++

c# - 如何从后面的代码调用回发?

asp.net - Windows azure 免费层后台处理?

asp.net - 从服务器打开文件并发送到浏览器

asp.net - 使用 asp :ButtonField in ASP. NET 2005 以编程方式更新 GridView 中的绑定(bind)复选框