Как показать уведомление пользователю, когда пользователь переходит на другую страницу без сохранения данных
У меня есть страница 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 ->, возможно, он захочет прочитать его, так как у него есть другие предложения / советы и хитрости.