我不明白AutoEventWireUp
页面属性负责什么。
我已经阅读了这篇文章,但即使是我也不明白。
当请求页面时,它会引发各种事件,这些事件被认为是其生命周期的一部分。我将Peter Bromberg 创建的视觉表示随身携带。
该AutoEventWireUp
属性为 True 时,会自动将 Page 生命周期中的一些内置事件连接到它们的处理程序。这意味着您不需要显式附加这些事件(例如,在 VB 中使用 Handles 关键字)。
这些内置事件的示例是Page_Init
和Page_Load
。
如果您设置AutoEventWireUp
为 True并提供 EventHandlers 的显式连接,您会发现它们被执行了两次!false
这是 Visual Studio默认将此属性设置为的原因之一。
编辑:(在 Chester89 的评论之后)
需要注意的是, AutoEventWireUp
Page 的属性的默认值为 ,而Page 类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
,或者如果它不存在,OnTransactionAbort
Page_CommitTransaction
,或者如果它不存在,OnTransactionCommit
System.Web 4.0 版Page_PreRenderCompleteAsync
为从 Page 派生的所有类引入了一个。该方法(如果存在)将使用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。