Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在不向服务器发送请求的情况下更新计数器_Asp.net Mvc_Facebook - Fatal编程技术网

Asp.net mvc 如何在不向服务器发送请求的情况下更新计数器

Asp.net mvc 如何在不向服务器发送请求的情况下更新计数器,asp.net-mvc,facebook,Asp.net Mvc,Facebook,我正在建立一个网站,我需要更新项目计数器时,它在数据库中更新。当任何用户添加一个新项目时,项目计数器应该在浏览器中自动更新,但我不想一次又一次地向服务器发送ajax请求,从数据库中获取计数,然后在web浏览器中更新计数器 我想要类似的“facebook通知如何更新”自动无需刷新页面或发送任何ajax请求,我知道有一些推送技术,但我不确定它是如何工作的 如果有人提供一些示例代码来实现这一点,那将是非常棒的 谢谢…您考虑过使用信号器吗 在阅读了一些SO回复和以上文章后,下面是基于快速POC的示例

我正在建立一个网站,我需要更新项目计数器时,它在数据库中更新。当任何用户添加一个新项目时,项目计数器应该在浏览器中自动更新,但我不想一次又一次地向服务器发送ajax请求,从数据库中获取计数,然后在web浏览器中更新计数器

我想要类似的“facebook通知如何更新”自动无需刷新页面或发送任何ajax请求,我知道有一些推送技术,但我不确定它是如何工作的

如果有人提供一些示例代码来实现这一点,那将是非常棒的


谢谢…

您考虑过使用信号器吗

在阅读了一些SO回复和以上文章后,下面是基于快速POC的示例代码。希望能有帮助

  • 创建新的空ASP.NET web应用程序项目
  • 通过NuGet添加信号器包

  • 使用以下代码添加UserCounter.cs。只需要从Hub基类继承类

    using SignalR.Hubs;
    public class UserCounter : Hub { }
    
  • 添加带有以下代码的Default.aspx:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                Number of users currently online - <b><span id="noOfUsers">0</span> users</b>
                <br />
                <a target="_blank" href="UpdateNoOfUsers.aspx">Change number of users</a>
            </div>
        </form>
        </body>
        <script src="Scripts/jquery-1.6.4.js" type="text/javascript"></script>
        <script src="Scripts/jquery.signalR.js" type="text/javascript"></script>
        <script src="/signalr/hubs" type="text/javascript"></script>
    
        <script type="text/javascript">
        $(function () {
            var usc = $.connection.userCounter;
    
            usc.noOfUsersUpdated = function (message) {
                $('#noOfUsers').text(message);
            };
    
            $.connection.hub.start();
        });
    </script>
    
    </html>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    </head>
        <body>
            <form id="form1" runat="server">
                <div>
                    No. of users: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
                </div>
            </form>
        </body>
        </html>
    
    
    当前联机的用户数-0个用户
    
    $(函数(){ var usc=$.connection.userCounter; usc.noOfUsersUpdated=函数(消息){ $('noOfUsers')。文本(消息); }; $.connection.hub.start(); });
  • 使用以下代码添加UpdateNofUsers.aspx:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                Number of users currently online - <b><span id="noOfUsers">0</span> users</b>
                <br />
                <a target="_blank" href="UpdateNoOfUsers.aspx">Change number of users</a>
            </div>
        </form>
        </body>
        <script src="Scripts/jquery-1.6.4.js" type="text/javascript"></script>
        <script src="Scripts/jquery.signalR.js" type="text/javascript"></script>
        <script src="/signalr/hubs" type="text/javascript"></script>
    
        <script type="text/javascript">
        $(function () {
            var usc = $.connection.userCounter;
    
            usc.noOfUsersUpdated = function (message) {
                $('#noOfUsers').text(message);
            };
    
            $.connection.hub.start();
        });
    </script>
    
    </html>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    </head>
        <body>
            <form id="form1" runat="server">
                <div>
                    No. of users: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
                </div>
            </form>
        </body>
        </html>
    
    
    用户数量:
    
  • 为UpdateNofUsers.aspx中的按钮单击添加事件处理程序

    using SignalR;
    using SignalR.Infrastructure;
    using SignalR.Hosting.AspNet;
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
        dynamic clients = connectionManager.GetClients<UserCounter>();
        clients.noOfUsersUpdated(TextBox1.Text);
    }
    
    使用信号机;
    使用信号基础设施;
    使用SignalR.Hosting.AspNet;
    受保护的无效按钮1\u单击(对象发送者,事件参数e)
    {
    IConnectionManager connectionManager=AspNetHost.dependencysolver.Resolve();
    动态客户端=connectionManager.GetClients();
    clients.noOfUsersUpdated(TextBox1.Text);
    }
    
  • 将“Default.aspx”设置为启动页后运行应用程序

  • 单击“更改用户数”链接打开一个新的浏览器窗口

  • 在文本框中输入一个数字,然后单击按钮以查看基本窗口中的值更改!在其他浏览器中打开此页面,可以看到相同的行为