【问题标题】:ASP.NET MVC - On page unloadASP.NET MVC - 页面卸载
【发布时间】:2011-10-06 01:42:55
【问题描述】:

所以当用户离开页面时,我需要做几件事。 我想我可以使用 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

【问题讨论】:

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


    【解决方案1】:

    你可以在 $(window).unload() 上触发一个 ajax 请求——我认为它不会妨碍用户。

    但是,我认为您无法确认 ajax 调用的结果,即通过回调处理返回的数据。我认为到那时该页面会“继续前进”。将其视为“一劳永逸”。

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

    【讨论】:

    • “一劳永逸”听起来不错。我正在尝试实现锁定功能,以便其他用户在其他用户打开记​​录时无法编辑该记录。我以前没有真正使用过 Ajax。谁能提供一个简单的例子?
    • @Tom:查看这里的复数视频:asp.net/mvc(它们是免费的并且是非常好的起点)。
    • 我已经用 PHP 做到了。没有太大区别——关键是使用$(window).unload(),并且确实假设在请求背后没有任何东西。它似乎工作正常。
    • @Tom Here 是基本的 jQuery ajax 调用,here 是一些使它更简单的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    相关资源
    最近更新 更多