【问题标题】:How to show progress-bar using SignalR [duplicate]如何使用 SignalR 显示进度条 [重复]
【发布时间】:2015-09-01 12:36:57
【问题描述】:

当我使用 AJAX 时,它非常简单:

  1. 启动进度条(如提交按钮进度条)
  2. 进行 AJAX 调用
  3. 调用成功处理程序时,使用您从 AJAX 调用中获得的数据更新 UI 并停止进度条

当我使用 SignalR 时,我会执行以下操作。在服务器上,我的集线器方法不返回任何内容(因此我无法更新 UI 并停止进度条)。相反,我为所有客户端(包括发送数据的客户端)调用类似 ThisDataWasChanged 的​​方法。

我不太确定该怎么做。我的意思是,我当然可以先为调用 hub 方法的客户端返回数据,然后更新所有其他客户端(以某种方式区分它们),但这似乎有点过头了。

【问题讨论】:

标签: asp.net-mvc signalr


【解决方案1】:

您需要在 Hub 类中执行以下操作

集线器

public class ProgressBarHub : Hub
{
    public void change()
    {
        // Do some stuff
        Clients.Client(Context.ConnectionId).thisDataWasChanged(progressBarObj);   
    }
}

JS

// Create hub
var hub = $.connection.progressBarHub;

// Connect
$.connection.hub.start().done(function () {
    // Start progress bar?
    // Create a start progress bar method in the hub and call it
    });


hub.client.thisDataWasChanged = function (progressBarObj) {
    //Do something to the progress bar with the progressBarObj that we returned 
};

【讨论】:

  • 不幸的是,在这个实现之后,所有客户端上的所有进度条都将在 thisDataWasChanged 之后关闭。应该有办法找出 thisDataWasChanged 是由特定的客户端调用引起的。
  • 什么意思会被关闭?您可以改用Clients.Client(Context.ConnectionId).thisDataWasChanged 将更新发送给调用客户端。
  • 我最终将 Context.ConnectionId 传递给 thisDataWasChanged 并在客户端上检查它是否是我的通知并停止进度条
  • 太棒了!很高兴我能帮上忙。
猜你喜欢
  • 2013-08-15
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多