asp.net - ¿Qué significa la propiedad de la página AutoEventWireUp?
(3)
No entiendo de qué es responsable la propiedad de la página AutoEventWireUp
.
Mientras navego por la red, he encontrado muchos foros con discusiones al respecto y todos me parecen discrepantes.
¿Puedo obtener una explicación clara de lo que significa exactamente esta propiedad?
He leído este artículo , pero incluso eso no lo entiendo.
Como se mencionó en el artículo, si tiene activado AutoEventWireUp, asp.net reconocerá automáticamente que tiene un método con la sintaxis page_load y lo llamará automáticamente:
private void Page_Load(object sender, System.EventArgs e)
{
}
Esto le da un código más limpio detrás a expensas de algunos (muy) pequeños gastos generales. Tenga en cuenta que si no lo especifica, debe indicar explícitamente a asp.net que desea manejar el evento de carga de página:
this.Load += new System.EventHandler(this.Page_Load);
Tenga en cuenta que esto se aplica a otros eventos en la página, ya que utiliza una convención de nomenclatura como Page_Event .
Cuando se solicita una página, genera varios eventos que se consideran parte de su lifecycle de lifecycle . Mantengo a mano la representación visual creada por Peter Bromberg.
La propiedad AutoEventWireUp
cuando es verdadera, automáticamente conecta algunos de estos eventos integrados en el ciclo de vida de la página a sus manejadores. Esto significa que no necesita adjuntar explícitamente estos eventos (usando la palabra clave Handles, por ejemplo, en VB).
Ejemplos de estos eventos integrados serían Page_Init
y Page_Load
.
Si establece AutoEventWireUp
en True y proporciona un cableado explícito de los EventHandlers, ¡encontrará que se están ejecutando dos veces! Esta es una de las razones por las que Visual Studio mantiene este atributo establecido en false
de manera predeterminada.
Edición: (después del comentario de Chester89)
Es útil tener en cuenta que el valor predeterminado del atributo AutoEventWireUp
de la página es true
, mientras que el valor predeterminado de la propiedad AutoEventWireUp
de la clase Page es false
Para añadir a respuestas anteriores; los ganchos automáticos se aplican desde TemplateControl.HookUpAutomaticHandlers
. Este método llama a TemplateControl.GetDelegateInformationWithNoAssert
que contiene los métodos que se consideran como controladores de eventos.
Estos son, en System.Web, versión 2.0:
En todas las clases derivadas de Page:
Page_PreInit
,Page_PreLoad
,Page_LoadComplete
,Page_PreRenderComplete
,Page_InitComplete
,Page_SaveStateComplete
.En todas las clases derivadas de TemplateControl:
Page_Init
,Page_Load
,Page_DataBind
,Page_PreRender
,Page_UnLoad
,Page_Error
Soporte de transacciones para todas las clases derivadas de TemplateControl:
-
Page_AbortTransaction
, o si no existe,OnTransactionAbort
-
Page_CommitTransaction
, o si no existe,OnTransactionCommit
-
System.Web, versión 4.0, introdujo un Page_PreRenderCompleteAsync
para todas las clases derivadas de Page. Ese método, si está presente, se registrará usando Page.RegisterAsyncTask y se ejecutará automáticamente "justo antes del evento PreRenderComplete" (fuente: Page.ExecuteRegisteredAsyncTasks ). Este método parece muy poco documentado, lo que sugiere que sería Page.RegisterAsyncTask llamar a Page.RegisterAsyncTask con su propio método.