2011-04-08 44 views
22

En mi página maestra, tengo un pequeño método en el evento Page_Load que comprueba si un usuario está conectado y los redirige a la página de inicio de sesión si no es así.La página ASP.NET 'Page_Load' se dispara antes del evento 'Page_Load' de Master Page?

El problema es que para algunas de mis páginas los eventos Page_Load suponen que hay usuarios conectados, y estos eventos parecen dispararse antes de la comprobación de inicio de sesión en la página maestra, lo que causa errores.

¿Cuáles son algunas formas de evitar esto? Cualquier evento que pueda usar aparte de Page_Load en mis páginas, disparará después de la página maestra?

+0

¿No está utilizando la autenticación de formularios? Solo debe especificar un LoginUrl para redireccionar automáticamente a su Login.aspx en cualquier página si el usuario no está autenticado o si la sesión ha expirado. http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.loginurl.aspx –

Respuesta

25

Tiene un rico Page Cycle con un montón de eventos para usar. Quizás podría usar Page_Init para verificar si el usuario ha iniciado sesión en la Página maestra. O use Page_PreRender en las otras páginas.

+0

Fantástico: cambió el control a Page_Init y ahora funciona perfectamente. ¡Gracias! – Chris

2

Si necesita cosas que ocurrirán en el MasterPage Load antes de los acontecimientos página, utilice el Page_PreRender

protected void Page_PreRender(object sender, EventArgs e) 

en la página real.

1

Deberá verificar si el usuario ha iniciado sesión para esas características, haciendo: if (this.Page.User.Identity.IsAuthenticated == true) { .. }. No se puede suponer nada, que es lo que estás experimentando. También puede mover su verificación de inicio de sesión a Page_Init, o incluso moverlo a un módulo HTTP que se ejecuta en cada carga de página; allí tiene acceso a una amplia gama de eventos, incluida la autenticación/autorización de la aplicación.

Si está utilizando la autenticación de formularios, puede utilizar el archivo de configuración para conducir esto en su lugar, a través del elemento de autorización.

<system.web> 
    <authorization> 
    <deny users="?" /> 
    <allow users="*" /> 
    </authorization> 
</system.web> 
<location path="login.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="*" /> 
    </authorization> 
    </system.web> 
</location> 

HTH.

Cuestiones relacionadas