Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Can';I don’我不能让我的活动付之一炬_Asp.net - Fatal编程技术网

Asp.net Can';I don’我不能让我的活动付之一炬

Asp.net Can';I don’我不能让我的活动付之一炬,asp.net,Asp.net,首次加载页面(!IsPostback)时,我在代码中创建一个按钮并将其添加到页面中,然后将事件处理程序添加到click事件中 但是,当单击按钮时,页面重新加载后,我的事件处理程序不会启动 有人能解释为什么吗?您需要添加按钮,而不仅仅是针对非回发。这是因为发生的事件绑定需要转换为HTML。如果绑定到OnInit和OnLoad之间的页面,则会发生此回发。因此,如果您希望按钮正确绑定事件,请确保您在OnInit中完成这项工作 请参阅“生命周期说明”页 如果没有在每次回发时重新附加事件处理程序,则按钮的

首次加载页面(!IsPostback)时,我在代码中创建一个按钮并将其添加到页面中,然后将事件处理程序添加到click事件中

但是,当单击按钮时,页面重新加载后,我的事件处理程序不会启动


有人能解释为什么吗?

您需要添加按钮,而不仅仅是针对非回发。

这是因为发生的事件绑定需要转换为HTML。如果绑定到OnInit和OnLoad之间的页面,则会发生此回发。因此,如果您希望按钮正确绑定事件,请确保您在OnInit中完成这项工作

请参阅“生命周期说明”页


如果没有在每次回发时重新附加事件处理程序,则按钮的事件将不存在。您需要确保每次刷新页面时都附加了事件处理程序。因此,以下是页面的事件顺序:

  • 使用按钮创建页面,并附加事件处理程序
  • 按钮被单击,导致回发
  • 在回发时,page_load事件跳过事件处理程序的附加,因为!IsPostback语句
  • 此时,该按钮没有事件处理程序,因此单击它不会触发事件

  • @布拉德:你的答案不完整;他很可能在页面生命周期中的页面加载事件中做得太晚了

    好吧,这是你错过的

    ASP.NET是无状态的。这意味着,在呈现页面并将其发送到浏览器后,页面对象及其上的所有内容都将被销毁。服务器上该页面与用户浏览器上的内容之间没有链接

    当用户单击按钮时,该事件连同其他信息(如隐藏的viewstate字段)一起发送回服务器

    在服务器端,ASP.NET确定处理请求的页面,并从头开始重建页面。服务器控件的新实例将根据.aspx页面创建并链接在一起。重新组装后,将对回发数据进行评估。viewstate用于填充控件,并触发事件

    这一切都是按照特定的顺序发生的,称为。为了在ASP.NET中执行更复杂的操作,例如创建动态控件并在运行时将其添加到网页,您必须了解网页生命周期

    对于您的问题,您必须在每次加载页面时创建该按钮。此外,必须在页面上触发事件之前创建该按钮。控制事件在页面加载和页面加载完成之间触发

    您希望在分析ViewState信息并将其添加到控件之前以及在触发控件事件之前加载控件,因此需要处理PreInit事件并在该点添加按钮。同样,每次加载页面时都必须执行此操作

    最后一个音符;在ASP.NET中,页面事件处理有点奇怪,因为事件是自动连接的。注意,加载事件处理程序称为页面加载