Как показать уведомление пользователю, когда пользователь переходит на другую страницу без сохранения данных

У меня есть страница asp.net для ввода данных, я хочу показать пользователю уведомление, когда пользователь уходит со страницы без выполнения процесса сохранения. Как я могу достичь этой функциональности на стороне клиента?

Редактировать:

Я не хочу показывать сообщение, когда пользователь просто открывает страницу ввода данных и уходит, если пользователь что-то добавил или отредактировал данные какого-либо поля, тогда нужно только показать сообщение.

Ценю твою помощь.

3 ответа

Для решения на стороне клиента вы можете использовать document.onbeforeunload, документировано здесь: https://developer.mozilla.org/en-US/docs/Web/API/Window.onbeforeunload

А на другой странице есть пример кода:

window.addEventListener("beforeunload", function (e) {
  var confirmationMessage = "\o/";

  (e || window.event).returnValue = confirmationMessage;     //Gecko + IE
  return confirmationMessage;                                //Webkit, Safari, Chrome etc.
});

Конечно, вы можете отследить, есть ли реальные изменения, прежде чем предупреждать пользователя.

Существует событие OnUnload, которое вызывается автоматически, когда пользователь покидает страницу.

Смотрите здесь: Страница выгрузки события в asp.net

Нечто подобное

protected override void OnUnload(EventArgs e)
{
    base.OnUnload(e);
    if(!userSaved) { //e.g. user has not saved
        //display error
    }
}

В качестве альтернативы моему другому ответу вы можете использовать JavaScript для вызова события:

<body onbeforeunload="ConfirmClose()" onunload="HandleOnClose()">

<script>
var myclose = false;

function ConfirmClose()
{
    if (event.clientY < 0)
    {
        event.returnValue = 'You have closed the browser. Do you want to logout from your application?';
        setTimeout('myclose=false',10);
        myclose=true;
    }
}

function HandleOnClose()
{
    if (myclose==true) 
    {
        //the url of your logout page which invalidate session on logout 
        location.replace('/contextpath/j_spring_security_logout') ;
    }   
}
</script>

Предоставлено, как обнаружить событие закрытия страницы с помощью ASP.NET ->, возможно, он захочет прочитать его, так как у него есть другие предложения / советы и хитрости.

Другие вопросы по тегам