Wenn Sie über ASP.NET AJAX partielle Postbacks sprechen, dann bin ich heute auch auf dieses Verhalten gestoßen und habe genau das Gleiche getan. (Wenn Sie nicht sind, ignorieren Sie meinen Beitrag vollständig).
Nach meiner bisherigen Erfahrung scheint es so, als ob Ihr partieller Postback durch eine Eingabe wird onbeforeunload während eines partiellen Postbacks nicht ausgelöst, aber wenn der partielle Postback durch eine Hyperlink wird es. Es scheint, als ob der Browser davon ausgeht, dass Sie weg navigieren, wenn Sie auf etwas in einem Anker-Tag klicken (nur in IE und FireFox getestet, aber ja).
Ob die Seite ein bestimmtes verstecktes Feld hat oder nicht, ist bereits das, was ich benutzte, um clientseitig zu bestimmen, wann es angemessen ist, die Weg-Navigations-Warnung zu zeigen, also konnte ich dies sehr einfach beheben, indem ich eine Überprüfung des Wertes des versteckten Feldes zu meiner if-Bedingung onbeforeunload hinzufügte und mich in die Handler BeginRequest und EndRequest des PageRequestManagers einklinkte, um den Wert zu setzen. Das effektiv deaktiviert die Warnung während partielle Postbacks. Sie könnten kompliziertere Logik hier hinzufügen, wenn es mehr spezifische Dinge, die Sie überprüfen wollten.
Hier ist ein stark vereinfachtes Codebeispiel. (sorry, wenn ich pared und zensiert bis zu dem Punkt, wo es nicht funktioniert, aber es sollte Ihnen eine Idee geben).
window.onbeforeunload = checkNavigateAway;
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(onBeginRequest);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(onEndRequest);
function onBeginRequest(sender, args) {
var navigateAwayFlag = $("input[id*='navigateAwayValue']");
if (navigateAwayFlag.length > 0) {
navigateAwayFlag[0].value = "false";
}
}
function onEndRequest(sender, args) {
var navigateAwayFlag = $("input[id*='navigateAwayValue']");
if (navigateAwayFlag.length > 0) {
navigateAwayFlag[0].value = "true";
}
}
function checkNavigateAway() {
var navigateAwayFlag = $("input[id*='navigateAwayValue']");
if (navigateAwayFlag.length > 0 && navigateAwayFlag[0].value == "true")
{
return "Warning Text";
}
}
Editar : Schlechte Nachrichten. Das oben genannte scheint im IE6 nicht zu funktionieren. Es scheint wie es feuert Ereignisse in einer anderen Reihenfolge als Firefox, so dass die onbeforeunload Feuer vor der AJAX beginRequest... Möglicherweise müssen Sie einen Weg finden, um den Wert der Flagge über den Hyperlink-Klick zu ändern, bevor das onbeforeunload ausgelöst wird.