ASP.NET MVC - 在页面卸载

时间:2011-10-06 01:42:56

标签: jquery asp.net-mvc asp.net-mvc-3

所以当用户离开页面时我需要做一些事情。 我想我可以使用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 个答案:

答案 0 :(得分:4)

你可以在$(window).unload()上发出ajax请求 - 我认为这不会妨碍用户。

但是,我认为您无法确认ajax调用的结果,即通过回调处理返回的数据。我认为那时页面会“继续”。将其视为“火与忘记”。

如果您需要某种确认ajax调用成功,或处理返回的数据,请在卸载之前寻找一种方法。