ASP.NET, jQuery, les formulaires sales et window.onbeforeunload

Dans mon ASP.NET web app, je suis en train de créer un moyen universel d'avertir les utilisateurs avant de naviguer à l'extérieur à partir d'un formulaire quand ils ont fait des modifications, à l'aide de jQuery. Les choses assez standard, mais après beaucoup de recherche je n'ai pas encore trouver une technique qui fonctionne.

Voici ce que j'ai à ce point:

    addToPostBack = function(func) {
        var old__doPostBack = __doPostBack;
        if (typeof __doPostBack != 'function') {
            __doPostBack = func;
        } else {
            __doPostBack = function() {
                old__doPostBack();
                func();
            }
        }
    }

    var isDirty = false;

    $(document).ready(function() {
        addToPostBack(function() {
            alert("Postback detected.")
            clearDirty();
        });
        $(':input').bind("change select keydown", setDirty);
        window.onbeforeunload = function(e) {
            var msg = "You have unsaved changes. "
            if (isDirty == true) {
                var e = e || window.event;
                if (e) { e.returnValue = msg; }
                return msg;
            }
        };
    });

    setDirty = function() {isDirty = true;}

    clearDirty = function() {isDirty = false;}

Cela fonctionne aussi loin que l'avertissement à l'utilisateur de naviguer à l'extérieur. Le problème est que je reçois le message d'avertissement sur tous les mêmes-la page de publication. Il y a un certain nombre de choses sur mes formulaires qui pourraient déclencher une publication:

  1. Il y a Enregistrer, Annuler et Supprimer des linkbuttons sur la page
  2. Il y a peut être d'autres linkbuttons sur la page d'exécuter côté serveur fonctionnalité, tout en restant sur la même page
  3. Il pourrait y avoir d'autres contrôles avec autopostback=true qui ont également des fonctions côté serveur attaché à eux, mais qui n'étaient pas le résultat à l'utilisateur de quitter la page.

Aucune de ces choses devraient provoquer un avertissement, parce que l'utilisateur n'est pas quitter la page. Mon code tente de détourner addToPostBack (plus de détails sur cette question) pour effacer le isDirty peu avant de les publier, mais le problème est que dans IE onbeforeunload feux avant __doPostBack, apparemment parce que IE feux onbeforeunload immédiatement lorsque le lien est cliqué (comme décrit ici).

De stage, j'ai pu relier chacun de ces contrôles pour effacer le isDirty peu, mais je préfère une solution qui fonctionne sur le niveau de forme et qui ne nécessite pas que je touche à tous de contrôle unique qui pourrait déclencher une publication.

Quelqu'un aurait-il une approche qui fonctionne dans ASP.NET et qui n'implique pas de câblage à tous les contrôles qui pourraient causer une publication?

source d'informationauteur Herb Caudill