dan*_*arj 3 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);
}
Run Code Online (Sandbox Code Playgroud)
请不要接受这个作为答案,chappoo回答了你的问题.
由于事件被触发一次,您的控件将只存在一次,并在下一次消失PostBack.您不应该在PostBack事件中创建/删除控件.必须Init在页面期间创建动态服务器控件.
以下是一些了解ASP.NET和ASP.NET MVC"生命周期"的链接.
ASP.NET
您可以看到Load在页面中必须存在任何控件以引发控件事件(RaiseChangedEvents)和回发事件(RaisePostBackEvent).例如,页面子控件和控件子控件在页面之后创建(CreateChildControls),数据绑定(后OnPreRender)和渲染(RenderControl)Load.有时,一些开发人员会调用EnsureChildControls页面Load中的预加载子控件.
http://msdn.microsoft.com/en-us/library/ms178472.aspx

ASP.NET MVC
"生命周期"纯粹用于请求处理.动作(Controller)呈现(视图)独立.
这个问题的答案在于理解 ASP.NET 页面生命周期。ASP.NET 在回发时重建页面的服务器实例。一旦服务器完成处理并将响应发送回客户端,服务器实例将永远销毁,并且只能使用浏览器中包含的数据(查看数据/cookie等)和剩余服务器数据(会话/缓存)。
您正在 Button1_OnClick 事件处理程序中连接动态按钮的单击事件。当 ASP.NET 尝试在下一次回发时重建页面时,它将不会运行此事件处理程序(因为没有单击 Button1),因此事件处理程序永远不会被连接,这解释了为什么它永远不会运行。您需要在 Page_Load 处理程序中或之前连接任何事件处理程序,以便捕获控件事件处理程序。
| 归档时间: |
|
| 查看次数: |
10715 次 |
| 最近记录: |