English 中文(简体)
AutoEventWireUp 页面属性是什么意思?
原标题:
  • 时间:2009-03-25 09:42:13
  •  标签:

我不理解AutoEventWireUp页面属性的作用是什么。

我已经读完了这篇文章,但我还是不理解。

最佳回答

当请求页面时,它会触发各种事件,这些事件被认为是页面生命周期的一部分。我会随身携带彼得·布罗姆伯格创建的可视化表示。

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

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

如果您将AutoEventWireUp设置为True并且显式进行EventHandlers的连接,您会发现它们被执行两次! 这就是为什么Visual Studio默认将此属性设置为false的原因之一。

编辑:(在Chester89的评论后)


值得注意的是,页面的AutoEventWireUp属性的默认值为true,而页面类的AutoEventWireUp属性的默认值为false

问题回答

补充前面的答案;自动钩子应用于 TemplateControl.HookUpAutomaticHandlers。此方法调用 TemplateControl.GetDelegateInformationWithNoAssert,其中包含被视为事件处理程序的方法。

这些是System.Web,版本2.0:

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

  • 关于所有派生自TemplateControl的类:Page_InitPage_LoadPage_DataBindPage_PreRenderPage_UnLoadPage_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);

请注意,该规则适用于页面中的其他事件,因为它使用的命名约定为页面_事件





相关问题
热门标签