Вызов. Net Основной метод действия до закрытия браузера - PullRequest
0 голосов
/ 24 февраля 2020

На моем .NET Core MVC веб-сайте я использую VueJs. в моем контроллере есть действие по обновлению базы данных, и для его завершения требуется почти 2 минуты. Поэтому, если другой пользователь открывает веб-сайт, на странице отображается сообщение «Пожалуйста, подождите, пока обновление базы данных не будет завершено». Я не хочу, чтобы какой-либо другой пользователь обновлял базу данных ... Только для пользователя.

ЧТО Я ИМЕЮ: Я использовал SQL таблицу, и если первый пользователь нажимает При помощи кнопки Обновить я устанавливаю в поле таблицы значение True, пока обновление не будет завершено. Как только обновление завершено, я установил для этого поля значение False. Когда новый пользователь входит на сайт, программное обеспечение проверяет эту таблицу SQL и, если статус TRUE, он показывает, пожалуйста, подождите.

ВЫПУСК : Если первый пользователь нажимает кнопку обновления и закрывает браузер! Поэтому SQL статус таблицы установлен в True, и никто другой не может его изменить.

SOLUTION : Я хочу вызвать метод Action, если пользователь закрывает свой браузер.

Что я сделал Я использую ajax для вызова метода действия в домашнем контроллере, но он не работает.

 <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
 <script type="text/javascript">
     $(document).ready(function () {
        $(window).on("beforeunload", function(e) {
            $.ajax({
                type: "POST",
                url: "@Url.Action("SetUpdateStatusFalse")",
                data: {},
                dataType: "text",
                success: function (msg) {
                    alert(msg);
                },
                error: function (req, status, error) {
                    alert(error);
                }
            });        
        return e.originalEvent.returnValue = "Your message here";
    });
  });       

</script>

ПРОБЛЕМА С КОДОМ : не работает. Ajax код работает, если я поместил код за пределы

 $(window).on("beforeunload", function(e) {} 

Я Утомил также с Vue JS, я считаю, что выборка не работает, потому что Пользователь уже закрыл браузер windows. Выборка не может быть использована после.

Vue:

new Vue({
el: '#app',
created() {
    window.addEventListener('beforeunload', () => {
        const that = this;
        console.log("User clsoed browser");
        browserClosed(that, getJsonUrl("Home", "SetUpdateStatusFalse"), function (data) { }); 
    }, false)
}

Метод действия в Home Controller:

 public JsonResult SetUpdateStatusFalse(){
      //SET Database False
      retrun Json("");
 }

JS Файл:

function browserClosed(vue, url, onSuccess) {
   fetch(url, { method: 'GET', credentials: 'include' })
    .then(
        function (response) {
                return;
            } 
        }
    )
    .catch(function (err) {
        console.log('Fetch Error: ', err);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...