我有一个问题。当我将事件处理程序从代码隐藏添加到按钮时,该事件永远不会被触发。但是当我在创建按钮标签时添加它时,它工作得很好,并且我从后面的代码创建按钮并将其添加到表中。
<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
来预加载子控件。
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 按钮事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18120203/