mvc3 обнаружить сайт (приложение) закрывается - PullRequest
2 голосов
/ 10 февраля 2012

Я создаю веб-сайт с mvc3, и мне нужно удалять данные в моей базе данных, только когда приложение закрывается.(Пользователь нажимает на красный значок x).

Я пытался с помощью javascript использовать событие onbeforeunload, но это событие происходит каждый раз, когда я захожу на новую страницу в моем приложении.

Возможно лиопределить, когда пользователь закрывает окно?

Ответы [ 3 ]

6 голосов
/ 10 февраля 2012

Это невозможно. Но вы можете создать небольшой блок javascript, который будет выполнять ajax-вызов каждые n минут / секунд, чтобы сообщить серверу, что у пользователя все еще открыт браузер.

Таким образом, вы можете установить тайм-аут, который говорит, что если через 5 минут мы не получим от пользователя сообщения, мы сможем удалить данные в базе данных (или любое другое действие, которое вам нужно сделать).

Для реализации логики тайм-аута есть 2 варианта:

  1. У вас есть отдельная служба (консольное приложение или служба Windows), запущенная через некоторый интервал, которая проверяет, превышает ли время ожидания какого-либо пользователя какое-либо значение. Если это так, то выполните любое необходимое действие.

  2. Если любой пользователь выполняет действие, которое было бы заблокировано, вы сначала проверяете, активен ли он у любого пользователя (значение тайм-аута больше, чем текущее время). Если есть, вы блокируете пользователя, если нет, вы можете удалить это старое значение тайм-аута, так как оно истекло.

3 голосов
/ 10 февраля 2012

Используйте синхронный ajax-запрос в событии window.unload.

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

. После очень быстрого поиска в Google я увидел этот фрагмент здесь

$(window).unload(function() {
    $.ajax({
        url: 'resetTheDocument?id=whatever',
        async: false,
        cache: false,
        type: "POST",
        data: "My work here is done"
    });
});
1 голос
/ 10 февраля 2012

Доброе утро, вы можете попробовать добавить свою логику в файл global.asax в методе Session_End, чтобы удалить запись в вашей базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...