AutoEventWireUp页面属性是什么意思?

che*_*r89 53 asp.net autoeventwireup

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

在网上冲浪时,我发现很多论坛都有关于它的讨论,它们对我来说都显得有些不一致.

我能否清楚解释这个属性究竟意味着什么?

我已经阅读了这篇文章,但即使我不理解.

Cer*_*rus 60

当请求页面时,它会引发各种事件,这些事件被认为是其生命周期的一部分.我将Peter Bromberg创造的视觉表现与我保持一致.

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

这些内置事件的例子是Page_InitPage_Load.

如果设置AutoEventWireUp为True 提供EventHandler的显式连接,您将发现它们被执行两次!这是Visual Studio false默认将此属性设置为的一个原因.

编辑:(在Chester89的评论之后)


值得注意的是AutoEventWireUp,Page 的属性true的默认值是,而AutoEventWireUpPage类的属性的默认值是false


sis*_*sve 27

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

这些是在System.Web版本2.0中:

  • 从页面派生的类: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,或者如果它不存在, OnTransactionAbort
    • Page_CommitTransaction,或者如果它不存在, OnTransactionCommit

System.Web,版本4.0,Page_PreRenderCompleteAsync为从Page派生的所有类引入了一个.该方法(如果存在)将使用Page.RegisterAsyncTask进行注册,并在"PreRenderComplete事件之前"自动执行(source:Page.ExecuteRegisteredAsyncTasks).这个方法似乎非常没有文档,这表明它更适合用你自己的方法调用Page.RegisterAsyncTask.


egl*_*ius 11

正如文章中提到的,如果你打开了AutoEventWireUp,asp.net会自动识别你有一个带有page_load语法的方法并自动调用它:

private void Page_Load(object sender, System.EventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)

这为您提供了一个更清晰的代码,代价是一些(非常)小的开销.请注意,如果您未指定它,则必须明确告诉asp.net您要处理页面加载事件:

this.Load += new System.EventHandler(this.Page_Load);
Run Code Online (Sandbox Code Playgroud)

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