Если вы говорите о частичной обратной передаче ASP.NET AJAX, то я столкнулся с этим и сегодня, делая то же самое. (Если нет, полностью игнорируйте мой пост.)
По моему опыту, похоже, что если ваша частичная обратная передача вызвана вводом , она не сработает при предварительной загрузке во время частичной обратной передачи, но если частичная обратная передача запускается гиперссылкой , так и будет. Похоже, что браузер предполагает, что вы уходите, если нажимаете на что-либо в теге привязки (проверено только в IE и FireFox, но да).
Наличие на странице определенного скрытого поля - это уже то, что я использовал для определения на стороне клиента, когда уместно показывать предупреждение об отсутствии навигации, поэтому я смог исправить это очень просто, добавив проверку скрытого значение поля для условия if моего onbeforeunload, и подключение к обработчикам PageRequestManager BeginRequest и EndRequest для установки значения. Это эффективно отключает предупреждение при частичной обратной передаче. Вы могли бы добавить более сложную логику, если бы вы хотели проверить более конкретные вещи.
Вот очень упрощенный пример кода. (извините, если я очищен и подвергнут цензуре до такой степени, что это не работает, но это должно дать вам представление.)
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";
}
}
Редактировать : Плохие новости. Вышеуказанное не работает в IE6. Кажется, что он запускает события в другом порядке, чем Firefox, поэтому onbeforeunload срабатывает до AJAX beginRequest ... Возможно, придется найти способ изменить значение флага через щелчок гиперссылки до того, как сработает onbeforeunload.