Asp.net mvc 如何在不向服务器发送请求的情况下更新计数器
我正在建立一个网站,我需要更新项目计数器时,它在数据库中更新。当任何用户添加一个新项目时,项目计数器应该在浏览器中自动更新,但我不想一次又一次地向服务器发送ajax请求,从数据库中获取计数,然后在web浏览器中更新计数器 我想要类似的“facebook通知如何更新”自动无需刷新页面或发送任何ajax请求,我知道有一些推送技术,但我不确定它是如何工作的 如果有人提供一些示例代码来实现这一点,那将是非常棒的Asp.net mvc 如何在不向服务器发送请求的情况下更新计数器,asp.net-mvc,facebook,Asp.net Mvc,Facebook,我正在建立一个网站,我需要更新项目计数器时,它在数据库中更新。当任何用户添加一个新项目时,项目计数器应该在浏览器中自动更新,但我不想一次又一次地向服务器发送ajax请求,从数据库中获取计数,然后在web浏览器中更新计数器 我想要类似的“facebook通知如何更新”自动无需刷新页面或发送任何ajax请求,我知道有一些推送技术,但我不确定它是如何工作的 如果有人提供一些示例代码来实现这一点,那将是非常棒的 谢谢…您考虑过使用信号器吗 在阅读了一些SO回复和以上文章后,下面是基于快速POC的示例
谢谢…您考虑过使用信号器吗 在阅读了一些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”设置为启动页后运行应用程序
- 单击“更改用户数”链接打开一个新的浏览器窗口
- 在文本框中输入一个数字,然后单击按钮以查看基本窗口中的值更改!在其他浏览器中打开此页面,可以看到相同的行为