我开始使用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个错误,第一个是在控制台中:
根据几个示例,是因为我没有放置类的名称,而其他例子是我必须放置[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
的原因,
有人建议我从中删除$.
$.notificationHub.client.updateDatos = function () {
cargarDatos();
};
为避免第一个错误,它可以正常工作,但是当我加载页面时,cargarDatos()
中的$.connection.hub.start().done(function ()
可以正确部署,但是当我在数据库中添加新记录时,没有任何反应。
我在此代码中的错误是什么?
答案 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();
}