部分视图中的SignalR客户端未接收

时间:2014-01-16 14:51:09

标签: c# asp.net-mvc signalr signalr-hub

我仍然掌握SignalR的基础知识。我想在我的网站的不同部分使用它,所以我想我可以在主布局中启动连接,并在子视图中添加客户端方法。

根据this answer我有:

window.hub = $.connection.hub.start();

在我的Layout.cshtml和

window.hub.done(function () {
   $.connection.notificationHub.server.joinScannerGroup(1);
   alert("in sub view");
});

在我的子视图中,有效。集线器已连接,并调用方法JoinScannerGroup()。但是,如果我尝试添加:

$.connection.notificationHub.client.scanReceived = function (text) {
    alert("scan received");
};

在子视图的javascript中的任何地方,它永远不会被调用。也许我认为它错了,但我想在主页上连接,然后允许任何子页面接收客户端电话。

另外,如果我将$.connection.start()移动到子视图中,它确实可以正常工作。我理解错了吗?

1 个答案:

答案 0 :(得分:5)

您需要在调用hub.start()之前添加所有客户端集线器方法,或者在调用hub.start()之前需要添加至少一个集线器方法(因此SignalR将订阅集线器)然后添加所有其他集线器方法如下:

$.connection.notificationHub.on('scanReceived ', function (text) {
    alert("scan received");
});

(另见documentation