AutoEventWireUp页面属性是什么意思?

我不明白什么AutoEventWireUp页面属性负责。

在网上冲浪的时候,我发现很多论坛都在讨论这个问题,他们都和我差不多。

我可以请清楚解释这个属性意味着什么吗?

我读过这篇文章 ,但即使是我不明白。

当页面被请求时,它引发了被认为是其生命周期一部分的各种事件。 我把彼得·布罗姆伯格(Peter Bromberg)创造的视觉performance方便地与我一起。

AutoEventWireUp属性为True时,会自动将页生命周期中的一些内置事件连接到其处理程序。 这意味着你不需要显式附加这些事件(例如,在VB中使用Handles关键字)。

这些内置事件的例子是Page_InitPage_Load

如果将AutoEventWireUp设置为True 提供EventHandler的明确接线,则会发现它们被执行两次! 这是Visual Studio默认将此属性设置为false的原因之一。

编辑:( Chester89的评论之后)


请注意,Page的AutoEventWireUp属性的默认值为true ,而Page类的AutoEventWireUp属性的默认值为false

添加到以前的答案; 自动挂钩从TemplateControl.HookUpAutomaticHandlers应用。 此方法调用TemplateControl.GetDelegateInformationWithNoAssert ,其中包含哪些方法被视为事件处理程序。

这些在System.Web 2.0版中:

  • 在派生的所有类从Page: Page_PreInitPage_PreLoadPage_LoadCompletePage_PreRenderCompletePage_InitCompletePage_SaveStateComplete

  • 从TemplateControl派生的所有类: Page_InitPage_LoadPage_DataBindPage_PreRender ,Page_UnLoad, Page_Error

  • 对从TemplateControl派生的所有类的事务支持:

    • Page_AbortTransaction ,或者它不存在, OnTransactionAbort
    • Page_CommitTransaction ,或者它不存在, 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); 

请注意,这适用于页面中的其他事件,因为它使用命名约定作为Page_Event