c# asp.net

c# - ¿Diferencia OnInit y OnLoad en ASP.NET?



(4)

ASP.NET invoca ambos métodos de Control clase Control . OnInit() método OnInit() genera el evento Init y el método OnLoad() genera el evento Load .

Tuve una entrevista hace una semana y una de las preguntas fue ¿cuál fue la diferencia entre OnInit y Onload en ASP.NET? No tenía ni idea y no encuentro respuestas sencillas en la red, ¿por qué alguien puede explicar brevemente y de forma sencilla cuál es la diferencia entre ambas? (Lo que encontré fue que la diferencia estaba en algo en el ciclo de vida).


Necesita leer sobre el ciclo de vida de la página ASP.NET .

OnInit ocurre anteriormente en el ciclo de vida: los cambios en el estado de la vista aún no se han realizado y el seguimiento no se ha activado.


OnInit (el evento Init ) ocurre después de que todos los controles se hayan inicializado, pero antes de que se habilite el seguimiento de ViewState . Se llama de abajo hacia arriba (los eventos Init para controles secundarios se llaman antes del evento Init sus padres).

Init es un buen lugar para agregar controles dinámicos a su página o al control del usuario (aunque no es un requisito). Si puede, entonces a esos controles se les restaurará automáticamente su ViewState durante las devoluciones de datos (ver más abajo). Sin embargo, es un lugar riesgoso para establecer las propiedades de control, ya que pueden ser sobrescritas por ViewState entrante. Init es el lugar correcto para configurar ViewStateUserKey , que puede ayudar a proteger su sitio de los ataques de un solo clic. También debería llamar a RegisterRequiresControlState() desde allí, si está usando el estado de control.

Justo después del evento Init , cada control habilita el seguimiento de ViewState , por lo que cualquier cambio en las propiedades de un control después de eso se reflejará en ViewState .

Los siguientes eventos en el nivel de la página son PreLoad y PreLoad , ninguno de los cuales es visible en el nivel de control. Durante una devolución, el ViewState entrante se restaura en los controles entre PreLoad y PreLoad .

Luego viene el evento de Load , que ocurre tanto para los controles como para la página. Load se llama primero en el nivel primario, y luego para cualquier control secundario. Una página maestra se comporta como un control en una página con respecto al orden de eventos.


Page_Init se levanta antes de Page_Load . Page_Init es un buen lugar para el código que desea ejecutar antes de seguir procesando, como adjuntar controladores de eventos al evento de carga.

es mejor no acceder a los controles en este evento porque no se garantiza que se hayan creado .

Page_Load es un buen lugar para almacenar código donde inicializa valores y cualquier control específico de la página porque sabe que en este punto los controles existen y están disponibles.

Colocarás mucho más código en Page_Load que en Page_Init para la mayoría de tus aplicaciones