我需要在服务器级别(“ONLINE”或“OFFLINE”)保留已记录用户的状态列表。
所以我编写了一个部分视图来维护用户当前状态(在线,离线)。 服务器将这些值存储在数据库中,并将所有当前在线用户存储在缓存条目中,以便我可以从缓存中检索所有当前“在线”用户的列表。
为了保持此列表的最新状态,我现在需要一个异步AutoRefresh调用,通知服务器将我的userID保留在ONLINE列表中。此调用应每xx秒执行一次,并且只应在当前状态为ONLINE时执行。
问题:
提前致谢。
这是有问题的部分视图。 你在哪里建议我把代码运行AutoRefresh(MasterPage,Main View,Partial View)???
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
if (MySite.Security.SiteUser.IsAuthenticated)
{
if (Convert.ToBoolean(ViewData["IsLogged"]))
{
%>
<div id="onlineStatus">
You are currently ONLINE >>
<%: Html.ActionLink("Take a Break", "GoOffline", "Account")%>
</div>
<%
}
else
{
%>
<div id="offlineStatus">
Ready for business >>
<%: Html.ActionLink("Go Online", "GoOnline", "Account")%>
</div>
<%
}
}
%>
答案 0 :(得分:3)
你们两个都把我放在了正确的方向,最后的“工作”答案是:
<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
setInterval(function {
var url = '<%: Url.Action("StillOnline", "Account") %>';
$.getJSON(url, null, function() { });}
, 10000);
});
</script>
答案 1 :(得分:1)
使用javascript,你可以设置一个为你做的功能
setInterval(function() {
if (I_AM_ONLINE) {
window.location.reload(true);
//Or instead of refreshing the page you could make an ajax
//call and determing if a newer page exists. IF one does then reload.
}
}, 300000);
其中300.000是每次通话(5分钟)之间的毫秒数。
I_AM_ONLINE仍然是最难的部分,取决于很多事情......
修改强>:
我会在部分内部添加此代码,(最好是在其末尾):
<% if (MySite.Security.SiteUser.IsAuthenticated) {
if (Convert.ToBoolean(ViewData["IsLogged"])) { %>
<script type="text/javascript">
setInterval( window.location.reload(true), 300000);
</script>
<%
}
}
%>
答案 2 :(得分:1)
这里有一些带有ajax调用和递归函数调用(异步)的js
var onlineupdate;
(onlineupdate = function()
{
if(online())
{
$.post('serverside url', data, function(){
setTimeout(onlineupdate,XX);
});
}
else
{
setTimeout(onlineupdate,XX);
}
})()
再次确定什么算作在线的功能需要确定。