管理员不一定是点击“退出”来退出后台管理界面的,大多数情况下是关闭浏览器,甚至死机关闭进程,断电。那么我们如何知道管理员有没有退出呢?这里主要考虑“关闭浏览器”的情况,但用以下的方法将所有情况统统包括在内,也属于编程技巧吧!记录下来,主要让自己回顾思路,熟悉ajax的使用。注意使用ajax的页面一定要<form name="Form1" runat="server">,由于我这里用了一个框架页面,没有runat="server",找了半天页面里也没有注册ajax。
每3秒异步的更新管理员的退出时间(当前时间),如果管理员不在了,则不会更新了,这样误差也不超过3秒,还是可以记录下来的。
这里注意:在pageload里注册类Ajax.Utility.RegisterTypeForAjax(typeof(_Default));
在_Default类里注册前台回调方法:[Ajax.AjaxMethod()]//ajax 注册类里的方法
{
private void Page_Load(object sender, System.EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(_Default));
}
//更新退出时间
[Ajax.AjaxMethod()]
public void UpdateOutTime()
{
DataProvider dp=DataProvider.InstanceData();
User u = Components.Context.GetUser();
if(u !=null && u.Id>0)
{
QsqAdminLog log = new QsqAdminLog();
log.UserId=u.Id;
log.LoginOutTime=DateTime.Now;
log.Update();
}
}
}
前台调用这个方法,function call(response){},这里的回调函数指明是异步的,由于这里没有返回值,所以调用一个空的回调函数。 setInterval(reFreshOutTime,3000);每3秒调用一次
function reFreshOutTime()
{
_Default.UpdateOutTime(call);
}
function call(response)
{
}
window.onload=function()
{
reFreshOutTime();
setInterval(reFreshOutTime,3000);
}
</script>
(这种ajax.dll这个组件独有的)
直接.value就是同步,执行一个回调函数即为异步。如果异步使用.value会报错,没有回调函数则被当作同步的。这和局部全部没有关系,ajax都是局部更新。在后台调用服务器端方法,但如果是同步 就会等着,异步就不用等。服务器返回了结果
就会通知回调函数去处理,显然异步要比同步好。
下面为一个同步的调用,验证论坛帖子标题是否已存在
function validate(o)
{
var result = ForumAdd.ValiedateTitle(o.value).value;//验证方法返回值
obj=document.getElementById("btnPub");
if(result)
{
//当方法返回为真,则隐藏添加按钮,并提示帖子存在
alert("该帖子已发表");
obj.style.display="none";
}
else
{
//显示按钮
obj.style.display='';
}
}
</script>