ASP.NET: предупреждение об изменении окон закрытия данных - PullRequest
3 голосов
/ 30 октября 2008

Я хотел бы предупредить пользователей, когда они пытаются закрыть окно браузера , если они не сохранили изменений, которые они внесли в веб-форму.

Я использую ASP.NET 3.5 (с ASP.NET Ajax).

Есть ли общее решение, которое я мог бы легко реализовать?

РЕДАКТИРОВАТЬ: возможно, мой вопрос не был ясен: Я специально ищу способ, который изящно интегрируется в методологию ASP.NET Управление сервером.

Ответы [ 6 ]

3 голосов
/ 30 октября 2008

Вот элемент управления ASP.NET, который поможет вам в этом:

http://www.codeproject.com/KB/ajax/ajaxdirtypanelextender.aspx

Надеюсь, это поможет. Это может не совсем соответствовать вашим потребностям, но, по крайней мере, покажет вам, как.

3 голосов
/ 30 октября 2008

вы хотите использовать

window.onbeforeunload

событие. Аналогично Gmail, если вы пытаетесь закрыть окно, если вы не сохранили составленное письмо.

Здесь есть образец JS.

http://forums.devarticles.com/javascript-development-22/how-to-stop-browser-from-closing-using-javascript-8458.html

2 голосов
/ 30 октября 2008

Просто добавьте событие window.onbeforeunload. Появится модальное окно, в котором вы можете остаться или покинуть страницу.

window.onbeforeunload = function (event) {
  var message = 'All changes will get lost!';
  if (typeof event == 'undefined') {
    event = window.event;
  }
  if (event) {
    event.returnValue = message;
  }
  return message;
}

Все браузеры будут предоставлять стандартное сообщение («Вы уверены, что хотите отойти от этой страницы?») Плюс ваше пользовательское сообщение.

Так что окно будет выглядеть так:

---------------------------------
| Are you sure you want to      |
| navigate away from this page? |
|                               |
| All changes will get lost!    |
|                               |
|     [Cancel]     [Ok]         |
---------------------------------
1 голос
/ 30 октября 2008

Вы можете создать элемент управления, который расширяет IExtenderProvider и который создает JavaScript для отслеживания изменений (или, скорее, зарегистрировать элементы управления с помощью механизма отслеживания изменений).

Вам все равно придется реализовать отслеживание изменений в Javascript, если только вы не хотите много постбэков.

Я сделал это у предыдущего работодателя, используя Prototype.Js . Я думаю, единственной трудностью было то, как Internet Explorer и Firefox требуют установить флаг «отменить навигацию».

0 голосов
/ 30 октября 2008

, как уже упоминали другие, вы захотите посмотреть на события window.onunload / onbeforeunload. Проблема этого события в том, что оно вызывается всякий раз, когда страница выгружается. Не только когда окно браузера закрыто, но и когда вы нажимаете на ссылку в том же окне браузера, чтобы перейти на другую страницу на том же сайте. Вы все еще можете делать то, что хотите, но это помогает, если вы можете предвидеть такое поведение.

0 голосов
/ 30 октября 2008

В событии Page_Unload (или вызове этой функции в теге body, <body onunload="onPageUnload();">) вы можете проверить, есть ли в форме данные. Тогда вы можете запустить Java:

<script language="text/javascript">
   function onPageUnload() {
        var oConfirm = window.confirm("You have unsaved form data, are you sure you want to close this window?");
        if(oConfirm){
            //Close
        }else{
            //Dont 
        }
    }
</script>

Посмотрите, как это работает для вас

РЕДАКТИРОВАТЬ: Может не помешать закрытию окна, но предупредит вашего пользователя, что в вашей форме есть несохраненные данные.

Подтверждено, не работает кросс-браузер, я исследую другой метод и выложу здесь.

...