具有自动刷新功能的MVC部分视图

时间:2010-11-22 22:41:44

标签: jquery ajax asp.net-mvc partial-views

我需要在服务器级别(“ONLINE”或“OFFLINE”)保留已记录用户的状态列表。

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

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

问题:

  1. 如何创建每XX秒触发一次的AutoRefresh调用
  2. 如果我处于在线状态
  3. ,我怎样才能确保此呼叫执行

    提前致谢。


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

3 个答案:

答案 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);
   }
})()

再次确定什么算作在线的功能需要确定。