我不理解AutoEventWireUp
页面属性的作用是什么。
我已经读完了这篇文章,但我还是不理解。
我不理解AutoEventWireUp
页面属性的作用是什么。
我已经读完了这篇文章,但我还是不理解。
当请求页面时,它会触发各种事件,这些事件被认为是页面生命周期的一部分。我会随身携带彼得·布罗姆伯格创建的可视化表示。
当AutoEventWireUp
属性为True时,自动将页面生命周期中一些内置事件与它们的处理程序连接起来。这意味着您无需显式附加这些事件(例如,在VB中使用Handles关键字)。
这些内置事件的例子包括Page_Init
和Page_Load
。
如果您将AutoEventWireUp
设置为True并且显式进行EventHandlers的连接,您会发现它们被执行两次! 这就是为什么Visual Studio默认将此属性设置为false
的原因之一。
编辑:(在Chester89的评论后)
值得注意的是,页面的AutoEventWireUp
属性的默认值为true
,而页面类的AutoEventWireUp
属性的默认值为false
。
补充前面的答案;自动钩子应用于 TemplateControl.HookUpAutomaticHandlers
。此方法调用 TemplateControl.GetDelegateInformationWithNoAssert
,其中包含被视为事件处理程序的方法。
这些是System.Web,版本2.0:
在所有从Page派生的类上:Page_PreInit
,Page_PreLoad
,Page_LoadComplete
,Page_PreRenderComplete
,Page_InitComplete
,Page_SaveStateComplete
。
关于所有派生自TemplateControl的类:Page_Init
,Page_Load
,Page_DataBind
,Page_PreRender
,Page_UnLoad
,Page_Error
。
所有继承自TemplateControl的类都支持事务。
Page_AbortTransaction
, or if it does not exist, OnTransactionAbort
Page_CommitTransaction
, or if it does not exist, OnTransactionCommit
System.Web 4.0 版本为所有从 Page 派生的类引入了 Page_PreRenderCompleteAsync
方法。如果存在该方法,则将使用 Page.RegisterAsyncTask 进行注册,并在“PreRenderComplete 事件之前”自动执行(来源:Page.ExecuteRegisteredAsyncTasks)。该方法似乎非常不被记录,这表明最好使用您自己的方法调用 Page.RegisterAsyncTask。
正如文章中所提到的,如果您开启了AutoEventWireUp,asp.net会自动识别您有一个带有page_load语法的方法,并自动调用它:
private void Page_Load(object sender, System.EventArgs e)
{
}
这样可以让您在一定程度上牺牲一些(非常小的)额外开销的情况下获得更加干净的代码。请注意,如果您不指定它,您必须明确告诉asp.net您希望处理页面加载事件:
this.Load += new System.EventHandler(this.Page_Load);
请注意,该规则适用于页面中的其他事件,因为它使用的命名约定为页面_事件。