2010-12-10 9 views
0

J'utilise asp.net et j'ai besoin d'afficher une invite à l'utilisateur si elles ont apporté des modifications à la page Web, et ils ferment accidentellement le navigateur.Invite à enregistrer les données si et quand les modifications ont été apportées

La page pourrait être quelque chose de « Modifier le profil » à « Soumettre une réclamation », etc.

Comment puis-je afficher le messagebox, assurant qu'il apparaît que si des modifications ont été apportées (par opposition à , l'utilisateur effectue des modifications, puis annule les modifications et arrête le navigateur)

Répondre

1

Ce que je l'ai fait dans le passé est d'utiliser des scripts côté client qui effectue cette vérification lors de l'événement onbeforeunload ....

var showPrompt=true; 
var isDirty=false; 
var hidePopup=false; 

    function onBeforeUnload() { 
     if (showPrompt) { 
      if (isDirty) { 
       if (hidePopup || confirm("Click ok to save your changes or click cancel to discard your changes.")) { 
        doSave(); 
       } 
      } 
     } 
     showPrompt = true; 
     hidePopup = false; 
    } 
  • ShowPrompt peut être défini sur false lorsque votre cliquant sur un point d'ancrage tag qui ne vous guidera pas loin de la page. Par exemple <a onclick='showPrompt=false' href='javascript:doX()'/>
  • isDirty peut être utilisé pour suivre quand vous avez besoin d'enregistrer quelque chose. Vous pouvez par exemple faire quelque chose comme $("input").onchange(function(){isDirty=true;}); Pour effectuer le suivi des annulations, vous pouvez remplacer isDirty par une fonction qui vérifie l'état actuel à partir du dernier état enregistré. HidePopup permet de forcer une sauvegarde sans confirmation à l'utilisateur.
1

Il est très difficile de toucher même sans comprendre ce qui se trouve sur la page. S'il s'agit de quelques contrôles, vous pouvez capturer de la valeur au chargement de la page et les stocker afin de pouvoir les comparer plus tard. Si c'est une page complexe, vous devez effectuer une comparaison exacte avec l'ensemble de viewstate.

En règle générale, vous devez gérer ce type de situation en définissant un booléen sur TRUE la première fois qu'une modification est apportée et en ignorant le changement de l'utilisateur. Si vous essayez simplement d'éviter les données non sauvegardées, l'utilisateur doit être assez intelligent pour savoir qu'il a "annulé" ses modifications.

+0

Fait du bon sens. Thats une bonne réponse. Bien que comment comparerais-je à un état de view (la syntaxe que je veux dire)? – user279521

+0

Vous pouvez comparer à viewstate lors d'un post de retour, mais vous ne pouvez pas utiliser cette méthode de manière fiable. Si j'arrête le navigateur ou navigue vers une autre page, la note que j'aurai reçue sera récupérée. Je ne recommanderais pas d'essayer d'analyser le côté client viewstate. – JoshBerke

1

Vous pouvez le faire avec javascript. Voir this question et l'une des deux premières réponses.

Questions connexes