AutoEventWireUp页面属性是什么意思?
我不明白什么AutoEventWireUp
页面属性负责。
在网上冲浪的时候,我发现很多论坛都在讨论这个问题,他们都和我差不多。
我可以请清楚解释这个属性意味着什么吗?
我读过这篇文章 ,但即使是我不明白。
当页面被请求时,它引发了被认为是其生命周期一部分的各种事件。 我把彼得·布罗姆伯格(Peter Bromberg)创造的视觉performance方便地与我一起。
AutoEventWireUp
属性为True时,会自动将页生命周期中的一些内置事件连接到其处理程序。 这意味着你不需要显式附加这些事件(例如,在VB中使用Handles关键字)。
这些内置事件的例子是Page_Init
和Page_Load
。
如果将AutoEventWireUp
设置为True 并提供EventHandler的明确接线,则会发现它们被执行两次! 这是Visual Studio默认将此属性设置为false
的原因之一。
编辑:( Chester89的评论之后)
请注意,Page的AutoEventWireUp
属性的默认值为true
,而Page类的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派生的所有类的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 。
- 要调用此方法,“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例
- Request.UserHostAddress和Request.ServerVariables 之间的区别是什么?ToString()
- 什么时候应该在ASP.NET MVC中使用asynchronous控制器?
- 如何使用multipart / form-data做一个ASP.NET MVC Ajax表单发布?
- 如何在WebMethod中获取调用者的IP地址?
- ASP.NET 5 MVC:无法连接到Web服务器“IIS Express”
- 从ASP.NET网站发送短信
- 如何在IIS7上运行时将maxAllowedContentLength设置为500MB?
- 从IFrameredirect父页面