将数据从ASP.NET MVC控制器推送到View

时间:2012-05-07 15:09:13

标签: c# sql-server ajax asp.net-mvc push

我将后端构建到一个网站,该网站将有多个小部件"在前端需要实时更新。

现在我只是有一个加载方法,可以在页面加载时用数据填充所有小部件。我的问题是如何处理进一步更新的实时方面。

我想过只有多个ajax调用,它可以每隔一秒左右查询一次服务,并返回最新的数据,但这似乎效率低下。

有没有办法去" 推送"数据到控制器的视图?

4 个答案:

答案 0 :(得分:3)

也许你可以看看这个项目:https://github.com/SignalR/SignalR

  

ASP.NET SignalR是一个面向ASP.NET开发人员的新库   非常简单,可以为您的实时添加实时网络功能   应用。什么是“实时网络”功能?这是能力   让您的服务器端代码将内容推送到连接的客户端   它会实时发生。

     

SignalR还为服务器提供了一个非常简单的高级API   到客户端RPC(在客户端的浏览器中调用JavaScript函数)   来自ASP.NET应用程序中的服务器端.NET代码)   添加用于连接管理的有用钩子,例如连接/断开   事件,分组连接,授权。

(摘自http://signalr.net/

希望它有所帮助。

答案 1 :(得分:2)

我认为最好的办法是定期轮询服务器:

$(document).ready(function() {

    setTimeout("getUpdate()", 30000);

    function getUpdate()
    {
        // Make an ajax call here
    }
});

这将要求每30秒更新一次。

答案 2 :(得分:1)

如果Web套接字在支持HTML5的浏览器中运行,也可以使用它。

答案 3 :(得分:1)

这取决于前端数据需要更新的频率。大多数页面不需要不断更新。我不知道有一个“最佳实践”门槛,但我认为一个好的起点是使用Ajax进行15-20秒的更新。快速,精简地进行Ajax调用 - 如果没有更新,可能只返回空白。如果您需要更快的更新,请查看名为long polling的内容。长轮询基本上是您触发对服务器的ajax调用的地方,并且连接处于打开状态,直到有数据要发送。长轮询将占用更多服务器资源,因为在等待数据准备就绪时,您将打开连接和线程。使用ASP.NET,您还必须担心杀死长轮询线程,因为默认情况下,当浏览器关闭连接时,这些线程不会被杀死(例如,如果某人导航离开页面。)