从Javascript调用ASP.NET方法

时间:2014-09-02 12:06:36

标签: javascript asp.net

我有一个网站,我想将我的数据库中的用户状态设置为0(离线)当用户想要退出网站时,问题是我尝试了Page_Unload方法但是不起作用我发现了一些Javascript代码哪个有效但这个Javascript代码在你想要离开网站时显示通知,在这个代码中我想调用一个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(UserName=@UserName)", conexiune);
                SetareOnline.Parameters.AddWithValue("@UserName", Session["Login"].ToString());
                conexiune.Open();
                SetareOnline.ExecuteNonQuery();
                conexiune.Close();
    }

1 个答案:

答案 0 :(得分:1)

你说你试过Page_Unload但它没有用;你试过它意味着你还没有读过页面生命周期,在MSDN中有清楚的记录。 unload事件的功能来自该链接:

  

在页面完全呈现,发送到客户端并准备好被丢弃之后调用Unload。此时,将卸载响应和请求等页面属性,并执行任何清理。

对于您要调用的功能,您需要使用JavaScript中的AJAX进行调查,并处理window.onbeforeunload事件(请参阅this StackOverflow question以获得全面的答案)。

也就是说,这仍然不能保证工作 - 仍然可以在不触发该呼叫的情况下退出浏览器,并且用户将被保留为“活动”。

更可靠的解决方案是实现以预定间隔(例如,每十秒或每分钟)运行的“心跳”,并呼叫Web服务说“是的,我还在这里”。然后,您记录上次触发心跳的时间,如果您未在设定时间(例如2分钟)内收到呼叫,则将用户计为离线。有关此问题的建议,请参阅this question