2014-09-02 2 views
0

사이트가 있고 사용자가 사이트를 종료하려고 할 때 내 데이터베이스의 사용자 상태를 0 (오프라인)으로 설정하려고합니다. 문제는 Page_Unload 메소드를 시도했지만 시도하지 않았습니다. T 작업 및 일부 자바 스크립트 코드를 발견하지만이 자바 스크립트 코드는 사이트를 떠날 때 및이 코드에서 ASP.NET 메서드를 호출하여 데이터베이스의 데이터를 변경하지만 작업하지 않을 때 알림을 표시합니다. 감사합니다. 전진!자바 스크립트에서 ASP.NET 메서드 호출

// 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

답변

1

Page_Unload을 시도했지만 작동하지 않는다고하셨습니다. 이를 시도한 것은 MSDN에 명확하게 문서화 된 페이지 수명주기를 읽지 않았 음을 의미합니다. 페이지가 완전히 렌더링 된 후에

언로드가 클라이언트로 전송,라고하며, 폐기 할 준비가 다음 unload 이벤트의 기능은 해당 링크에서입니다. 이 시점에서 Response 및 Request와 같은 페이지 속성이 언로드되고 정리가 수행됩니다.

통화 할 기능을

, 당신은 window.onbeforeunload 이벤트 (포괄적 인 대답을 this StackOverflow question 참조) 자바 스크립트에서 AJAX를 사용하여 조사하고 처리해야합니다.

즉, 여전히 작동하지 않을 수도 있습니다. 브라우저를 종료하지 않고도 브라우저를 종료 할 수 있으며 사용자는 '활성'상태로 유지됩니다.

훨씬 더 안정적인 솔루션은 예약 된 간격 (예 : 매 10 초마다 또는 매분)으로 실행되는 "하트 비트"를 구현하고 "예, 아직 여기 있습니다"라고 말하기 위해 웹 서비스를 호출하는 것입니다. 그런 다음 하트 비트가 마지막으로 트리거 된 시간을 기록하고 설정된 시간 (예 : 2 분) 내에 전화를받지 않은 경우 사용자를 오프라인으로 계산합니다. 이에 대한 아이디어는 this question을 참조하십시오.

관련 문제