Como saben, hay varios controladores Page_xxx
de eventos, como Init
, Load
, Prerender
... Este evento existen en los controles, y páginas, así como controles de usuario (de hecho están Control
forma, que posee todos derivados estos eventos).
Este evento se relacionan con la ASP.NET Page Life Cycle
Si usted lee la página a la que apunta este enlace con cuidado va a entender cuando se desencadenan los acontecimientos. Por lo tanto, si vincula su controlador de eventos en cualquier evento de ciclo de vida de la página que ocurra antes de que se desencadenen los eventos, se garantiza que los controladores de eventos estarán vinculados a tiempo para que se activen.
Estas son las principales etapas del ciclo de vida:
PreInit -> Init -> InitComplete -> PreLoad -> Load -> [Control events] ->
LoadComplete -> PreRender -> SaveStateComplete -> Render -> Unload
eventos No todos ellos han asociados, pero, si es necesario, puede anular la función OnXxx()
correspondiente, como OnPreInit()
. (Esto generalmente solo se realiza en controles de servidor personalizados).
Puede enlazar eventos en Page_Init
o Page_Load
, debido a que los eventos de control se triggerd después de la carga de todos los controles ha terminado. El paso Load
ocurre en la parte superior de la pantalla, primero en la página y luego recursivamente en todos los controles secundarios.
Después de Load
acabados, los primeros eventos que se desencadenan son los eventos de cambio, como TextChanged
o SelectionChanged
. Luego se activan todos los demás eventos, como Click
.
Si enlazó los eventos en PreRender o Descargar, no se activaron. Si lo hizo en Init o Load, lo harían.
Así podría parecer que es segura para unirse en Init o de carga, pero eso no es cierto:
Podría parecer que no hay ninguna razón especial para atarlos en Init
o Load
, porque van a se activará más adelante en el ciclo de vida de la página. Pero, como el enlace definido en .aspx
ocurre durante Init
, un programador esperará que todos los eventos ya estén vinculados en el evento Load
. ¿Qué pasaría si este programador plantea un evento de control de un niño en el código detrás? El evento Load
ocurre primero en la raíz del árbol de control, y en todos los elementos secundarios, recursivamente. Por lo tanto, para cuando el programador intente plantear el evento del control secundario, ya no estará vinculado. Entonces esto no funcionará como se esperaba. Esto es más que suficiente para considerar inseguro enlazar eventos en el evento Load
. Es por eso que siempre debe vincular eventos en Init
.
Mira este diagrama para ver el orden de ejecución de la página & niños eventos: ASP.NET Page Life Cycle Diagram
¿Está utilizando cualquier marcos como MVC o se trata de formularios web ASP.Net? –
@JeremyThompson. en MVC no hay código detrás, ¡gracias a Dios! – gdoron
@JeremyThompson, webforms ... :) – walther