2010-11-22 94 views
4

我需要在服务器级别(“在线”或“离线”)保留记录的用户状态列表。使用AutoRefresh MVC部分视图

所以我写了一个部分视图来维护用户当前的状态(在线,离线)。 服务器将这些值存储在数据库和所有当前在线用户的缓存条目中,以便我可以从缓存中检索所有当前“在线”用户的列表。

为了保持这个列表最新,我现在需要一个异步的AutoRefresh调用,通知服务器将我的用户ID保留在ONLINE列表中。此调用应该每xx秒执行一次,并且只应在当前状态为ONLINE时执行。

问题:

  1. 我怎样才能创建一个自动刷新调用一个触发间隔XX秒
  2. 我怎么能保证这个调用执行,只有当我在在线状态是

谢谢提前。


这是有问题的部分视图。 你在哪里建议我把代码运行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> 
     <% 
     } 
    } 
%> 
+1

如何设置用户本身是在线/离线? – generalhenry 2010-11-22 22:54:28

+0

用户点击链接即可联机或脱机。我需要的是能够告诉服务器用户仍然在线。 这就是我需要每隔XX秒自动刷新功能的地方。 – 2010-11-25 10:13:24

回答

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

使用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保持最难的部分和取决于许多因素....

EDIT

我(优选在它的端部)添加部分本身,这里面的代码:

<% if (MySite.Security.SiteUser.IsAuthenticated) { 
     if (Convert.ToBoolean(ViewData["IsLogged"])) { %> 
      <script type="text/javascript"> 
      setInterval(window.location.reload(true), 300000); 
      </script> 
<% 
     } 
    } 
%> 
+0

你会把这个调用放在上面的PartialView上吗? – 2010-11-24 07:54:29

1

这里的一些JS用Ajax调用和递归函数调用(异步)

var onlineupdate; 
(onlineupdate = function() 
{ 
    if(online()) 
    { 
    $.post('serverside url', data, function(){ 
     setTimeout(onlineupdate,XX); 
    }); 
    } 
    else 
    { 
     setTimeout(onlineupdate,XX); 
    } 
})() 

再次确定什么计数为在线的功能需要确定。