第一次加载页面时 (!IsPostback),我在代码中创建一个按钮并将其添加到我的页面,然后向单击事件添加一个事件处理程序。
但是,当单击按钮时,页面重新加载后,我的事件处理程序不会触发。
谁能解释为什么?
@Brad:你的答案不完整;他很可能在页面生命周期的 Page_Load 事件期间这样做得太晚了。
好吧,这就是你所缺少的。
ASP.NET 是无状态的。这意味着,在渲染页面并将其发送到浏览器后,页面对象及其上的所有内容都会被销毁。服务器上该页面与用户浏览器上的内容之间不存在任何链接。
当用户单击按钮时,该事件将与其他信息(例如隐藏的视图状态字段)一起发送回服务器。
在服务器端,ASP.NET 确定哪个页面处理请求,并从头开始重建页面。服务器控件的新实例根据 .aspx 页面创建并链接在一起。一旦重新组装,就会评估回发数据。视图状态用于填充控件,并触发事件。
这一切都按照特定的顺序发生,称为页面生命周期 http://msdn2.microsoft.com/en-us/library/system.web.ui.page_events.aspx。为了在 ASP.NET 中执行更复杂的操作,例如创建动态控件并在运行时将它们添加到网页,您必须了解页面生命周期。
对于您的问题,您必须在每次加载页面时创建该按钮。此外,您必须在页面上触发事件之前创建该按钮。控制事件在 Page_Load 和 Page_LoadComplete 之间触发。
您希望在解析 ViewState 信息并将其添加到控件之前以及在控件事件触发之前加载控件,因此您需要处理 PreInit 事件并在此时添加按钮。同样,每次加载页面时都必须执行此操作。
最后一点;页面事件处理在 ASP.NET 中有点奇怪,因为事件是自动连接的。请注意,Load 事件处理程序称为 Page_Load...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)