ASP.NET MVC - на странице выгрузки - PullRequest
4 голосов
/ 06 октября 2011

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

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

Есть идеи?

ОБНОВЛЕНО: Решение

Вот решение, с которым я столкнулся (позже сделаю обработку ошибок чуть лучше :)).

Поскольку мне нужно выполнить операцию удаления, я добавил дополнительную безопасность после прочтения этого поста; http://stephenwalther.com/blog/archive/2009/01/21/asp.net-mvc-tip-46-ndash-donrsquot-use-delete-links-because.aspx

В виде:

$(window).unload(function() {
  var ajurl = "/Assignments/unlockAssignment/" + '@model.ID' + "/";
  $.ajaxSetup ({  
        cache: false  
    }); 

    $.ajax({
       type: "DELETE",
       url: ajurl,
       error: function (xhr, status, error) {
            //do something about the error
            alert('error');
        },
       success: function(){
         alert('Data Saved:');
       }
     });
});

Контроллер

<AcceptVerbs(HttpVerbs.Delete)>
<Authorize()>
Function unlockAssignment(ByVal id As Integer)
    Dim ass As Assignment = db.Assignments.Find(id)

    Dim lck = From a In db.AssignmentLocks
                  Where a.ID = ass.Lock.ID
                  Select a

    db.Entry(lck.FirstOrDefault).State = EntityState.Deleted
    db.SaveChanges()

End Function

1 Ответ

4 голосов
/ 06 октября 2011

Вы можете просто запустить ajax-запрос к $ (window) .unload () - я не думаю, что это помешает пользователю.

Однако я не думаю, что вы сможете подтвердить результаты вызова ajax, то есть обработать возвращенные данные с помощью обратного вызова.Я предполагаю, что к тому времени страница «переместилась бы».Подходите к нему как к «пожни и забудь».

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

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