2011-10-06 116 views
4

所以我需要做一些事情,當用戶離開頁面。 我想我可以使用JQuery window.unload捕獲該事件,但我不確定如何將一些數據保存回數據庫。ASP.NET MVC - 在頁面卸載

我很高興打電話給另一個動作或類似的東西,但我不想阻止用戶進入他們前往的頁面。

任何想法?

更新:解決方案

這裏是我去解決(我會做出錯誤處理更好一點後:))。

因爲我需要執行刪除操作,所以在閱讀本文後添加了一些額外的安全性; 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 

回答

4

你可以只開槍$一個Ajax請求(窗口).unload() - 我不認爲這會阻礙用戶。

但是,我認爲您不能確認ajax調用的結果,即通過回調處理返回的數據。我認爲那時頁面會「繼續前進」。把它看作是一場「火與忘」。

如果您需要某種確認ajax調用成功或處理返回的數據,請在卸載前查找方法。

+0

火和忘記的聲音很好。我試圖實現鎖定功能,以便其他用戶無法編輯記錄,如果其他用戶打開它。 我以前沒有真正使用過Ajax;有人能提供一個簡單的例子嗎? – Tom

+0

@Tom:在這裏查看複合視頻視頻:http://www.asp.net/mvc(他們是免費的,非常好的起點)。 –

+0

我已經完成了這一點,雖然與PHP。沒有太大的區別 - 關鍵是使用'$(window).unload()',並且確實假設請求沒有做任何事情。它似乎工作正常。 – Cymen