2014-09-02 4 views
0

У меня есть сайт, и я хочу установить статус пользователя в моей базе данных на 0 (Offline), когда пользователь хочет выйти из сайта, проблема в том, что я пытался использовать метод Page_Unload, но doesn ' t, и я нашел код Javascript, который работает, но этот код Javascript показывает уведомление, когда вы хотите покинуть сайт, и в этом коде я хочу вызвать метод ASP.NET для изменения данных в базе данных, но не работает. Спасибо в заранее!Вызов метода 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

ответ

1

Вы сказали, что вы пытались Page_Unload и он не работает; что вы попробовали это означает, что вы не читали на жизненном цикле страницы, четко задокументировали в MSDN. Функция unload события, из этой ссылке:

Разгрузка вызывается после того, как страница была полностью оказана, отправляемый клиенту, и готов быть отброшены. На этом этапе свойства страницы, такие как «Ответ и запрос», разгружаются и выполняется любая очистка.

Для функциональности вы хотите позвонить, вам необходимо исследовать с помощью AJAX из JavaScript, и обрабатывать window.onbeforeunload событие (см this StackOverflow question всеобъемлющего ответа).

Тем не менее, это все еще не гарантирует работу - по-прежнему можно выйти из браузера без запуска этого вызова, и пользователь будет оставлен как «активный».

Более надежное решение заключается в том, чтобы внедрить «сердцебиение», которое выполняется через запланированный интервал (скажем, каждые десять секунд или каждую минуту) и вызывает веб-службу, чтобы сказать «Да, я все еще здесь». Затем вы записываете последний раз, когда был запущен пульс, и считайте пользователя автономным, если вы не получили вызов в течение установленного времени (например, 2 минуты). См. this question за идеи по этому вопросу.

Смежные вопросы