Вызов метода ASP.NET из Javascript

У меня есть сайт, и я хочу установить статус пользователя в моей базе данных на 0 (Offline), когда пользователь хочет выйти из сайта, проблема в том, что я попытался использовать метод Page_Unload, но не работает, и я нашел код Javascript, который работает, но этот код Javascript показывает уведомление, когда вы хотите покинуть сайт, и в этом коде я хочу вызвать метод ASP.NET для изменения данных в базе данных, но не работает. Спасибо заранее!

// Javascript code
 window.************** = confirmExit;

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

//This is on my Master Page
 

 

//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(UserName=@UserName)", conexiune);
 SetareOnline.Parameters.AddWithValue("@UserName", Session["Login"].ToString());
 conexiune.Open();
 SetareOnline.ExecuteNonQuery();
 conexiune.Close();
 }
1 ответ

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

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

Для функциональности, которую вы хотите вызвать, вам нужно исследовать с помощью AJAX из JavaScript и обработать событие window.************** (см. qaru.site/questions/26550/... для получения исчерпывающего ответа).

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

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

licensed under cc by-sa 3.0 with attribution.