Это сработает перед загрузкой, если btnSave отправит сообщение, которое выглядит так, как будто оно есть. Поэтому у вас есть несколько вариантов
Запретить btnSave отправлять сообщения обратно, если вам это не нужно. Самый простой способ сделать это - поместить этот атрибут в разметку asp: Button
OnClientClick = "return false"
Подключите метод javaScript / jQuery, чтобы отключить событие onbeforeunload. Я делал это раньше, сохраняя значение в скрытом поле и используя его, чтобы сигнализировать, что событие onbeforeunload должно запускаться.
например
$('#<%= btnSave.ClientID %>').bind('click', function(e){
$('#myHiddenFieldId').val('1');
});
и измените свой обработчик on beforeunload, чтобы убедиться, что скрытое поле не равно 1 (установите 0 по умолчанию, т.е.
window.onbeforeunload = function (evt) {
if( $('#myHiddenFieldId').val() != '1')
{
//your logic here
}
}
Возможно, вы могли бы сделать что-то лучше, отсоединив обработчик onbeforeunload в событии щелчка btnSave, используя JQuery, а не скрытое поле для переопределения.
Вариант 2 может стать неудобным - так что удачи