最近設計一個VB.Net的項目,應用了AjaxPro2,覺得確實不錯,很多妙用在其中,下面就記錄一個用Ajax來處理用戶在線離線的問題,沒有Ajax的時候都是寫到Session_End裡面,用Ajax也很容易實現,在這裡假設你的Ajax已經配置好,如果沒有AjaxPro的支持,你就要考慮項目是否要用AJax了,因為它會增加項目大量的腳本。
首先你要有一個用戶表,表裡面設計一個字段ONLINEKBN(在線區分),默認1為在線,0為離線。
幀結構主窗口關閉前事件,此事件點擊浏覽器關閉的時候觸發。

<script type="text/Javascript">

function window.onbeforeunload()


...{

var strUserId = document.getElementById("hidUserId").value;

CO2Reduction.Index.AJax_UpdKbn(strUserId);

};

</script>
//隱藏控件
<input id = "hidUserId" runat="server" type="text" value=""/>
Login.ASPx登陸的時候,更新用戶的狀態為在線狀態(1)。


<AjaxPro.AJaxMethod()> _


Public Function CheckUserInfo()Function CheckUserInfo(ByVal strUserID As String, _

ByVal strPassWord As String) As String

......................

......................

//Check成功後,更新表裡的在線區分

strUpdSql.Append(" UPDATE 用戶表 SET ")

strUpdSql.Append(" ONLINEKBN = '1' ")

strUpdSql.Append(" WHERE ")

strUpdSql.Append(" USERID= ")

strUpdSql.Append(" '" + strUserID + "'")

strUpdSql.Append(" AND ")

strUpdSql.Append(" KBN='0'")

......................

......................

Return ""

End Function
因為Login.ASPx是作為主窗口的一個幀畫面的,所以用AJax驗證用戶後在Login.JS裡的回調函數裡給主窗口的隱藏控件設置用戶登陸番號。
window.parent.document.getElementById('hidUserId').value=document.getElementById('txtUserID').value;
主窗口關閉觸發事件AJax調用後台函數,利用參數(用戶),更新用戶表裡面的在線區分(0)。

<AjaxPro.AJaxMethod()> _


Public Function Ajax_UpdKbn()Function AJax_UpdKbn(ByVal strUserId As String) As Boolean

//連接我就不寫在這裡了

Dim strUpdSql As New StringBuilder


strUpdSql.Append(" UPDATE 用戶表 SET ")

strUpdSql.Append(" ONLINEKBN = '0' ")

strUpdSql.Append(" WHERE ")

strUpdSql.Append(" USERID= ")

strUpdSql.Append(" '" & strUserId & "'")

strUpdSql.Append(" AND ")

strUpdSql.Append(" KBN='0'")


Return True

End Function可以了,關閉窗體,狀態就變回來了,不用寫到Session_End裡面了。