Asp.net mvc 如何使用信号器显示进度条

Asp.net mvc 如何使用信号器显示进度条,asp.net-mvc,signalr,Asp.net Mvc,Signalr,当我使用AJAX时,它非常简单: 启动进度条(如提交按钮进度条) 进行AJAX调用 调用成功处理程序时,使用从AJAX调用中获得的数据更新UI,并停止进度条 当我与信号员一起工作时,我会执行以下操作。在服务器上,我的hub方法不返回任何内容(因此我无法更新UI并停止进度条)。相反,我为所有客户机(包括发送数据的客户机)调用类似ThisDataWasChanged的方法 我不太清楚该怎么办。我的意思是,我当然可以首先返回调用hub方法的客户机的数据,然后更新所有其他客户机(以某种方式区分它们),但

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

  • 启动进度条(如提交按钮进度条)
  • 进行AJAX调用
  • 调用成功处理程序时,使用从AJAX调用中获得的数据更新UI,并停止进度条
  • 当我与信号员一起工作时,我会执行以下操作。在服务器上,我的hub方法不返回任何内容(因此我无法更新UI并停止进度条)。相反,我为所有客户机(包括发送数据的客户机)调用类似ThisDataWasChanged的方法


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

    您需要在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 
    };
    

    请发布您的代码,说明您当前如何使用进度条,以便我们提供更好的答案请参阅此完整答案:不幸的是,在此实施后,所有客户端上的所有进度条都将在此数据更改后关闭。应该有一种方法可以发现此数据已更改是由特定的客户端调用引起的。您认为将关闭是什么意思?您只需使用
    Clients.client(Context.ConnectionId)将更新发送到调用客户端即可。thisDataWasChanged
    。我最终将Context.ConnectionId传递给thisDataWasChanged,并在客户端上检查它是否是我的通知并停止进度!很高兴我能帮忙。