asp.net autoeventwireup

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.