我无法定义“客户端” SignalR

时间:2018-09-28 05:12:27

标签: c# asp.net-mvc signalr

我开始使用signalR,但出现错误(我在网上看到了几个答案,但没有一个帮助我),我有以下文件:

GenteHub.cs

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using Microsoft.AspNet.SignalR;
    using Microsoft.AspNet.SignalR.Hubs;

    namespace EjemploSignal
    {
        public class GenteHub:Hub
        {
            [HubMethodName("noti")]
            public static void llenarDatos()
            {
                IHubContext context = GlobalHost.ConnectionManager.GetHubContext<GenteHub>();
                context.Clients.All.updateDatos();
            }
        }
    }

enlace.js

var notificationHub = $.connection.genteHub;

    $.connection.hub.start().done(function () {
        cargarDatos();
    });

    $.notificationHub.client.updateDatos = function () {
        cargarDatos();
    };

    function cargarDatos() {
        $.ajax({
            url: "Home/lista",
            method: "GET",
            async: false,
            dataType: "json",
            success: function (respuesta2) {
                console.log("Respuesta", respuesta2);

            }
        });
    }

Layout.html(脚本参考)

<script src="~/Scripts/jquery-3.3.1.js"></script>
    <script src="~/Scripts/jquery.signalR-2.3.0.js"></script>
    <script src="~/signalr/hubs"></script>
    <script src="~/Scripts/enlace.js"></script>
    <script src="~/Scripts/modernizr-2.6.2.js"></script>
    <script src="~/Scripts/bootstrap.min.js"></script>

我有2个错误,第一个是在控制台中:

enter image description here

根据几个示例,是因为我没有放置类的名称,而其他例子是我必须放置[HubMethodName]的名称(我已经放置了两个并且有相同的错误)

我在网络中遇到的第二个错误:

if (typeof ($.signalR) !== "function") {
        throw new Error("SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/js.");
    }

根据未生成文件hub的原因,

  • 未正确放置文件顺序(当我拥有它们时 顺序为“ jquery,jquery信号,集线器”)
  • 必须放置或不放置符号(〜)(不好的是,我 放上并删除它,错误仍然存​​在)

有人建议我从中删除$.

$.notificationHub.client.updateDatos = function () {
        cargarDatos();
};

为避免第一个错误,它可以正常工作,但是当我加载页面时,cargarDatos()中的$.connection.hub.start().done(function ()可以正确部署,但是当我在数据库中添加新记录时,没有任何反应。

我在此代码中的错误是什么?

1 个答案:

答案 0 :(得分:3)

它应该是notificationHub.client而不是$.notificationHub.client。因此,请按如下所示编写您的enlace.js代码:

var notificationHub = $.connection.genteHub;

$.connection.hub.start().done(function () {
     cargarDatos();
});

notificationHub.client.updateDatos = function () { // not $.notificationHub, its notificationHub
        cargarDatos();
};

function cargarDatos() {
        $.ajax({
            url: "/Home/lista",
            method: "GET",
            contentType: "application/json",
            success: function (respuesta2) {
                console.log("Respuesta", respuesta2);

       }
    });
}
  

当我在数据库中添加新记录时,没有任何反应。

无论何时将记录添加到数据库中,它都不会自动调用。将记录添加到数据库后,您必须手动调用它,如下所示:

[HttpPost]
public ActionResult YourAddRecordMethod(YourRecord yourRecord)
{
    // Your adding record code here

    HubContext context = GlobalHost.ConnectionManager.GetHubContext<GenteHub>();
    context.Clients.All.updateDatos();
}