2012-01-06 32 views
20

Tuve una entrevista hace una semana y una de las preguntas fue ¿cuál era la diferencia entre OnInit y Onload en ASP.NET? No tenía ni idea y no encontré ninguna respuesta simple en la red, así que ¿alguien puede explicar de manera breve y simple cuál es la diferencia entre ambos? (Lo que encontré fue que la diferencia era algo en el ciclo de vida).Diferencia OnInit y OnLoad en ASP.NET?

+2

No se sienta tan mal. Regularmente realizo entrevistas para desarrolladores "senior" de ASP.NET, y solo muy pocos entienden el ciclo de vida de la página. – RickNZ

+0

Sí, lo sé (y acabo de comenzar mi "carrera" hace 5 meses) pero tenía algo sobre esta pregunta que debería haber sabido la respuesta. Y después de la entrevista realmente quería entender la diferencia entre ambos pero no pude encontrar una respuesta simple en la red, hasta ahora;) ty – dg90

+0

Página/MasterPage/Control lifecycle me hace llorar :( –

Respuesta

18

Necesita leer en el ASP.NET page lifecycle.

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

+3

Ok eso dice más, pero No entiendo por qué debería hacer algo antes de que se carguen los cambios en el estado de la vista. ¿Puede dar un ejemplo? Eso me haría más sencillo comprender por qué es útil. – dg90

+4

@daageu - Si necesita inicializar un control , deberías hacer eso aquí. Este es también el mejor momento para recrear los controles dinámicos, de lo contrario los cambios en su viewstate no se reflejarán automáticamente. – Oded

+0

Ah, por supuesto, ahora estamos hablando;) Gracias por la información. – dg90

5

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 caso porque no se garantiza que se hayan creado.

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

Va a colocar un código mucho más en Page_Load de lo que será en Page_Init para la mayoría de sus aplicaciones

+3

En lugar de un enlace, ¿por qué no también publicar un resumen de la página, para que no todos tengan que hacer clic? – Oded

+1

@Oded: gracias por el comentario, actualicé la respuesta :) –

+0

¡Gracias por el resumen! Ayudó mucho. – dg90

0

Ambos métodos de Control clase son invocados por ASP.NET. El método OnInit() plantea el evento Init y el método OnLoad() genera el evento Load.

+3

Sí, lo sabía, pero quiero entender la diferencia entre ambos y un ejemplo de cuándo debo usar Init y cuándo OnLoad – dg90

+0

@daageu - Por favor, lea ese artículo de MSDN (publicado por Oded) – adatapost

23

OnInit (el evento Init) se produce después de que se hayan inicializado todos los controles, pero antes de que se habilite el seguimiento ViewState. Se denomina ascendente (se llama a los eventos Init para controles secundarios antes del evento Init de su padre).

Init es un buen lugar para agregar controles dinámicos a su página o control de usuario (aunque no es un requisito). Si puede, entonces esos controles tendrán su ViewState restaurado automáticamente durante la devolución de datos (ver a continuación). Sin embargo, es un lugar arriesgado para establecer propiedades de control, ya que pueden sobrescribirse con el ViewState entrante. Init es el lugar correcto para establecer ViewStateUserKey, que puede ayudar a proteger su sitio de los ataques con un solo clic. También puede llamar al RegisterRequiresControlState() desde allí, si está utilizando el estado de control.

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

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

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

+0

¡Perfecto gracias! Encontré algo de información sobre el ciclo de vida de Init a Onload, pero mucho más difícil de describir que esto. – dg90

Cuestiones relacionadas