2009-06-05 6 views
0

Actuellement, j'ai un code comme suit:Besoin d'aide pour comprendre flux de contrôle avec Event Handlers

protected override void OnLoad(EventArgs e) 
{ 
    if(IsAuthorized(param1, param2, ...)) 
    { 
     //snip 
    } 
    else 
    { 
     Response.Write("Not authorized"); 
    } 
} 

protected void MyButton1_Click(object sender, EventArgs e) 
{ 
    //snip 
} 

protected void MyButton2_Click(object sender, EventArgs e) 
{ 
    //snip 
} 

Lorsque l'utilisateur est connecté, ils peuvent aller à la page et court OnLoad. Maintenant, s'ils laissent leur session expirer avec la page toujours ouverte, alors essayez de cliquer sur MyButton1, ils seront accueillis avec "Non autorisé", mais le code dans MyButton1_Click sera toujours exécuté. Quelqu'un pourrait-il m'indiquer comment gérer correctement ce genre de situation? J'ai supposé que je pourrais juste jeter de nouvelles SecurityException(), puis afficher n'importe quelle erreur que je voulais dans le catch (SecurityException), cependant le gestionnaire d'événement fonctionne toujours. Merci d'avance.

+0

Dans la mesure où je peux voir les eventhandlers devraient fonctionner parfaitement? Vous n'avez rien dans votre code qui arrête l'eventhandler dans les boutons pour arrêter d'appeler les événements .. Corrigez-moi si je me trompe :) – Moulde

+0

La question était quelle serait la meilleure façon d'arrêter le flux de contrôle après! IsAuthenticated in OnLoad . J'étais trop compliqué, comme indiqué dans la réponse marquée. –

Répondre

1

Vous pouvez jeter un contrôle d'authentification autour de votre code tel que ce code de MSDN:

private void Page_Load(object sender, EventArgs e) 
{ 
    // Check whether the current request has been 
    // authenticated. If it has not, redirect the 
    // user to the Login.aspx page. 
    if (!Request.IsAuthenticated) 
    { 
     Response.Redirect("Login.aspx", true); 
    } 
} 

Je crois que c'est plus propre que le Response.Write() car l'utilisateur voit clairement qu'ils ne sont plus authentifié.

+0

C'est en fait ce que je fais, je l'ai juste écrit pour simplifier la question. J'essayais de contourner les blocs d'authentification autour de chaque gestionnaire d'événement. J'espérais que cela pourrait être réalisé en lançant une sorte d'exception dans le OnLoad() lorsque l'utilisateur n'est plus authentifié et ne continue pas sur le gestionnaire d'événements dans ce scénario. –

+0

Manqué la partie importante de la Response.Redirect ... Changez-le en Response.Redirect ("Login.aspx", true); C'est une surcharge qui provoque l'arrêt de la page. –

+0

Merci. –

Questions connexes