2014-09-02 60 views
0

我有一個網站,我想在我的數據庫,設置用戶狀態爲0(離線),當用戶想退出該網站一個ASP.NET方法,問題是我試圖激發Page_Unload方法,但沒有按」噸的工作,我發現了一些Javascript代碼可以工作,但這個JavaScript代碼顯示了一個通知,當你想離開網站,並在這段代碼中,我想調用一個ASP.NET方法來更改數據庫中的數據,但不起作用。提前!從JavaScript調用

// Javascript code 
    window.onbeforeunload = confirmExit; 

function confirmExit() { 
    PageMethods.OnlineOut(); 
} 

//This is on my Master Page 
<script type="text/javascript" src='<%= ResolveClientUrl("~/JavaScript.js") %>'></script> 

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> 
</asp:ScriptManager> 

//This is on my Content Page.cs 
[WebMethod] 
    public void OnlineOut() 
    { 
     SqlConnection conexiune = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
       SqlCommand SetareOnline = new SqlCommand("Update [dbo].[Table] Set Online=0 Where([email protected])", conexiune); 
       SetareOnline.Parameters.AddWithValue("@UserName", Session["Login"].ToString()); 
       conexiune.Open(); 
       SetareOnline.ExecuteNonQuery(); 
       conexiune.Close(); 
    } 
+0

你的頁面方法應該是靜態的。 – Mairaj 2014-09-02 12:32:57

回答

1

你說你試過Page_Unload它沒有工作;你試過它意味着你沒有閱讀頁面生命週期,在MSDN清楚地記錄。 unload事件的功能是從該鏈接開始的:

卸載在頁面完全呈現,發送到客戶端並準備放棄之後調用。此時,響應和請求等頁面屬性被卸載並執行任何清理。

對於要調用的功能,你需要使用AJAX從JavaScript進行調查,並處理window.onbeforeunload事件(見this StackOverflow question進行了全面的答案)。

儘管如此,這仍然不能保證工作 - 它仍然有可能退出瀏覽器,而不會觸發該呼叫,用戶將被保留爲「主動」。

一個更加可靠的解決方案是實現以預定間隔(比如說,每隔十秒或每分鐘)運行的「心跳」,並調用Web服務來說「是的,我還在這裏」。然後記錄上次觸發心跳的次數,並且如果您在設定的時間內(例如2分鐘)沒有收到呼叫,則將該用戶計爲離線。關於這方面的想法見this question