2010-11-22 93 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); 
    } 
})() 

再次確定什麼計數爲在線的功能需要確定。