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

本文关键字:视图 控制器 MVC 数据 ASP NET | 更新日期: 2023-09-27 18:33:21

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

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

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

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

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

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

ASP.NET SignalR 是面向 ASP.NET 开发人员的新库,使其 将实时 Web 功能添加到您的 应用。什么是"实时网络"功能?这是能力 让服务器端代码将内容推送到连接的客户端 它实时发生。

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

(摘自 http://signalr.net/)

希望对您有所帮助。

我认为你最好的选择是定期轮询服务器:

$(document).ready(function() {
    setTimeout("getUpdate()", 30000);
    function getUpdate()
    {
        // Make an ajax call here
    }
});

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

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

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