Evenement unload ?

systemic_anomaly Messages postés 59 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 1 août 2005 - 11 avril 2005 à 15:12
quineman Messages postés 72 Date d'inscription jeudi 30 novembre 2000 Statut Membre Dernière intervention 10 novembre 2008 - 17 déc. 2007 à 22:34
Bonjour,

J'aimerais tout simplement exécuter une opération particulière lorsque je quitte une page. Donc récupérer un évènement lorsque je clique sur un autre lien (menu web user control) qui m'envoi vers une autre page ou lorsque je quitte l'application (croix rouge. Possible ?).

J'ai essayé l'évènement Unload et j'ai vérifié qu'il passe bien dedans mais pas qd j'en ai vraiment besoin donc tt à la fin.

Merci d'avance.

9 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
11 avril 2005 à 18:04
l'evenement unload coté serveur, se declenche quand le garbage collector en a envie, donc pas fiable comme truc :D



sinon pour faire une action coté serveur, quand le client part c'est
pas évident, car tu sais pas quand celui ci part vu qu'asp.net
travaille en mode deconnecté. Pour cela il faudra utiliser des petites
astuces.



Deja essayer de recuperer l'event via javascript (www.javascriptfr.com)
ensuite une fois que t'as ca, le plus simple aurait été de faire un
postback, mais si la fenetre ferme tu ne pourras pas, tu peux par
contre peut etre essayer de charger une page genre
quit.aspx?idsession=4520320



ensuite dans quit.aspx tu peux recuperer l'id de la session tu sais que
si cette page est appelé c'est que tu peux faire l'action que t'as
envie.



Je suis pas sur qu'on puisse faire ca via js, mais c'est à essayer.

<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
1
systemic_anomaly Messages postés 59 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 1 août 2005 4
12 avril 2005 à 14:06
Je peux maintenant récupérer l'evenement Onunload comme ceci:
0
systemic_anomaly Messages postés 59 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 1 août 2005 4
12 avril 2005 à 14:22
heuuuuu j'viens de voir que mon message a perdu des plumes à l'ajout donc je reprends.

Je peux maintenant récupérer l'evenement onunload comme ceci :

" <script event ="onunload" for ="window"> "

J'aimerais donc si c'est possible pouvoir faire appel à ma fonction du codebehind "UpdateDBFromSkillTree( )".

Si ce n'est pas possible, connais tu une autre astuce ?

Merci pour ton aide.
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 avril 2005 à 18:44
A mon avis faire un truc comme ca bof :-/ en tout cas moi j'aime pas trop.



une fois que t'es la, j'ai pas le temps de te montrer tout le code,
mais en gros, dans le page_load tu forces la page a mettre la fonction
javascript __dopostback c'est un propriété de l'objet page à mettre à
true, je me rappelle plus du nom.



ensuite dans le script



<script event="onunload" for="window">

_doPostBack('','onUnload')

</script>


aprés dans le page_load de la page



if page.ispostback andalso request.forms("__EVENTARGUMENT") is not nothing andalso request.form("__EVENTARGUMENT") = "onUnload")



UpdateDB

end if



C'est pas une facon joli de faire, mais c'est la plus simple



par contre je suis persuadé que tu pourrais refaire autre chose car la
c'est vraiment bof, imagine que le client change l'url pour aller sur
un autre site, la bd ne sera jamais mis à jour etc.... donc pense à une
autre solution, fin de la session par exemple.



<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
systemic_anomaly Messages postés 59 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 1 août 2005 4
13 avril 2005 à 11:10
Oui moi non plus ça ne me plaisait pas. Donc j'ai repensé le problème et j'ai trouvé une solution plus catholique que l'update en quittant la page.

Merci encore pour ton aide et tes remarques judicieuses.
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
14 avril 2005 à 01:19
C'etait de loin la meilleure solution au problèmes

<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
quineman Messages postés 72 Date d'inscription jeudi 30 novembre 2000 Statut Membre Dernière intervention 10 novembre 2008
17 déc. 2007 à 17:41
Oui avec le fichier global.asax
Par contre j'arrive à detecter clairement le Session_Start mais l'évenement Session_End ne se déclenche à mon avis que quand le navigateur est ouvert... Malheureusement, quand on ferme le navigateur, l'événement ne se déclenche pas (d'ailleurs, c'est surment normal, la session se ferme t elle ? La variable de session est encore sur le serveur ?). Donc re question : y'a t il un moyen de détecter la perte de connection entre un navigateur et un serveur avec un événment dot net ?
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
17 déc. 2007 à 21:25
quineman ==> resneigne toi auprès des bases de http ! c'est complétement impossible.

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
0
quineman Messages postés 72 Date d'inscription jeudi 30 novembre 2000 Statut Membre Dernière intervention 10 novembre 2008
17 déc. 2007 à 22:34
Oui, je sais nous sommes en déconnecté.



Ma problématique étant que si la personne ne termine pas son achat, et donc ne travail pas jusqu'au bout la Session var. Elle garde en mémoire des informations erronées qui peuvent interférés avec de nouvelles informations...
Une solution pourrait peut être de mettre un UpdatePanel Ajax qui fait une requête toutes les 10 sec au server ? un peu lourdaud mais on peut faire un truc dans le genre
   tant que j'ai une requête toute les 10 sec
      je travail avec ma session
   sinon
      je détruis ma variables de session / j'exécute mon code de fin de session
   fin tant

Mais en fait il y a beaucoup plus simple :Tester dans le masterPage si l'internaute a finaliser son achat en imputant la valeur  true à finAchat et ensuite on test dans le masterPage :<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>










If

Not IsNothing(Session("maVar")) And Session("finAchat") = FalseThen






            Session.Clear()
EndIf







 







Cette solution est approprié puisque quand l’internaute ferme son navigateur et reviens, il créer une nouvelle variable…





 
0
Rejoignez-nous