AutoEventWireUp页面属性是什么意思?

时间:2009-03-25 09:42:13

标签: asp.net autoeventwireup

我不明白AutoEventWireUp页面属性的责任。

在网上冲浪时,我发现很多论坛都有关于它的讨论,而且它们对我来说都是不一致的。

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

我已阅读this article,但即使我不理解。

3 个答案:

答案 0 :(得分:57)

当请求页面时,它会引发各种被认为是lifecycle的一部分的事件。我把Peter Bromberg创造的visual representation放在我身边。

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

这些内置事件的示例包括Page_InitPage_Load

如果您将AutoEventWireUp设置为True 并且提供EventHandler的显式连接,您会发现它们被执行了两次!这是默认情况下Visual Studio将此属性设置为false的原因之一。

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


值得注意的是,Page的AutoEventWireUp属性的默认值为true,而Page类的AutoEventWireUp属性的默认值为{{1 }}

答案 1 :(得分:27)

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

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

  • 在源自Page:Page_PreInitPage_PreLoadPage_LoadCompletePage_PreRenderCompletePage_InitCompletePage_SaveStateComplete的所有类中。< / p>

  • 在从TemplateControl派生的所有类中:Page_InitPage_LoadPage_DataBindPage_PreRenderPage_UnLoadPage_Error

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

    • Page_AbortTransaction,或者如果它不存在,OnTransactionAbort
    • Page_CommitTransaction,或者如果它不存在,OnTransactionCommit

System.Web 4.0版为从Page派生的所有类引入了Page_PreRenderCompleteAsync。该方法(如果存在)将使用Page.RegisterAsyncTask进行注册,并在“PreRenderComplete事件之前”自动执行(来源:Page.ExecuteRegisteredAsyncTasks)。这种方法似乎没有记录,这表明它更倾向于用你自己的方法调用Page.RegisterAsyncTask

答案 2 :(得分:11)

正如文章中提到的,如果你打开了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