PartialView中的SignalR客户端未接收

Jon*_*lis 1 c# asp.net-mvc signalr signalr-hub

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

根据这个答案,我有:

window.hub = $.connection.hub.start();
Run Code Online (Sandbox Code Playgroud)

在我的Layout.cshtml中,和

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

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

$.connection.notificationHub.client.scanReceived = function (text) {
    alert("scan received");
};
Run Code Online (Sandbox Code Playgroud)

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

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

Lar*_*ner 5

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

$.connection.notificationHub.on('scanReceived ', function (text) {
    alert("scan received");
});
Run Code Online (Sandbox Code Playgroud)

(另见文件)