2009-07-16 9 views
1

Je suis en train d'accrocher l'événement window.onbeforeunload dans une page ASPX. J'ai besoin de ce pas pour déclencher si je page un GridView qui est dans un UpdatePanel sur la même page.ASP.NET AJAX supprime le chargement des requêtes AJAX à partir de l'interface de mise à jour

J'ai essayé d'accrocher l'événement initializeRequest de PageRequestManager mais celui-ci se déclenche trop tard, c'est-à-dire après un chargement. J'ai aussi essayé de vérifier PageRequestManager.get_isInAsyncPostBack() dans mon gestionnaire onbeforeunload mais cela retourne false aussi, gah!

J'ai lu ce fil SO:

537702

Mais cela ne fait pas de sens pour moi que d'autres liens page GridView provoquer une décharge alors que des boutons dans une colonne GridView ne le font pas? Quelqu'un sait comment résoudre cela? Je suppose que le seul moyen est d'attacher le gestionnaire de clic côté client à toutes les ancres de page de GridView pour définir un indicateur booléen, mais je ne suis pas sûr de savoir comment y parvenir de manière fiable.

Répondre

2

Ok JQuery à la rescousse!

<script type="text/javascript"> 
    var flag = true; 
    window.onbeforeunload = beforeUnloading; 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_pageLoaded(initPagers); 

    function initPagers() { 
     $(".gridViewPagerStyle").click(function() { flag = false; }); 
    } 

    function beforeUnloading(){ 
     if(flag) 
      return "unloading"; 

     flag = true; 
    } 
</script> 

: 
: 

<asp:GridView ... PagerStyle-CssClass="gridViewPagerStyle" ... /> 

: 
: 

Définir une classe Css pour tous les liens de téléavertisseur, l'utiliser pour ajouter javascript gestionnaires de clic qui définissent un drapeau lorsque vous cliquez dessus, utilisez le drapeau pour éviter onbeforeunload

Questions connexes