2009-06-03 7 views
1

Je suis le code d'écriture en fonction Page_Load comme celui-ciComment empêcher l'ajout du même événement dans la page Asp.net?

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
     UserControl1.Button_Clicked += new EventHandler(UserControl1_Button_Clicked); 
    } 
} 

Mais la même fonction sera ajoutée à nouveau lorsque la page dirige vers cette page de l'autre page.

Existe-t-il une sorte de méthode pour empêcher cela?

J'essaie d'utiliser la session pour l'empêcher, mais je voudrais savoir s'il existe une meilleure méthode pour faire le même travail. Merci beaucoup!

+0

Utilisez-vous Server.Transfer? – jrista

Répondre

1

En C# ASP.NET, un gestionnaire d'événements pour un contrôle doit être ajouté à chaque chargement de la page. Voilà comment fonctionne le cadre. Par conséquent, si vous souhaitez déclarer des gestionnaires d'événements personnalisés pour vos contrôles, son nettoyeur doit le faire dans l'événement Page_Init de la page. Enfin, comme cela doit toujours arriver, n'emballez pas le code dans la condition "if (! IsPostBack)".

+0

Mais si je n'emballe pas le code dans la condition "if (! IsPostBack)". Lorsque je clique sur le bouton et que je reviens, la méthode de clic sur le bouton sera levée deux fois! – Kirk

+0

Essayez de placer le code où vous avez défini le gestionnaire d'événements une seule fois dans l'événement Page_Init de la page, testez-le et faites-moi savoir si l'événement de bouton se déclenche deux fois. à votre santé – andy

1

Je vous recommande également de définir autoeventwireup = false dans votre page .aspx. Ensuite, dans votre code derrière la page (fichier .cs), ajoutez l'événement pour votre gestionnaire de boutons dans l'élément page_init.

J'ai vu où cela va parfois causer deux fois mes événements, si je laisse cela vrai.
La condition (! IsPostBack) ne devrait pas être nécessaire pour un bouton.

0

la méthode stupide est comme ceci:

Déclarez une variable a privé As Boolean = True

Protected Sub cmd_Entry_Click (expéditeur de ByVal comme objet, ByVal e comme System.EventArgs) Poignées cmd_Entry.Click Si a = IsPostBack Ensuite SAVEDATA() clearData() a = False End If End Sub

qui devrait fonctionner: D

Questions connexes