在SingalR Javascript客户端中解析数据库记录

时间:2019-05-20 09:15:21

标签: asp.net .net asp.net-mvc signalr-hub signalr.client

我正在学习ASP.NET Core SignalR。我在MVC框架下编写了一个与SQLite数据库进行交互的基本程序。该程序允许用户对数据库执行CRUD操作。我在程序中介绍了SignalR集线器。服务器定期从数据库获取记录列表,并使用集线器SendAsync函数将其推送到客户端。在Javascript中心客户端中,我试图解析(并显示)收到的消息。一切正常(从数据库中获取项目列表,通过集线器发送),但访问一个项目的元素时我会收到 undefined 消息,尽管从数据库中检索了三个项目,并且为每个项目分配了有效值元件。

数据库的

架构(在“ 模型”文件夹下):

public class IenState
{
    public int Id { get; set; }   

    public ulong NetId { get; set; }
    public ushort NodeId { get; set; } 
}

从中心的服务器端发送消息:

var ienStates = from m in dbcontext.IenState select m;                           
var listdb = await ienStates.ToListAsync();  //here 3-items recovered
await hubContext.Clients.All.SendAsync("IenStateDb", listdb);

Javascript 集线器客户端(名为 IenStateHub.js ):

const connection = new signalR.HubConnectionBuilder()
.withUrl("/ienStateHub")
.configureLogging(signalR.LogLevel.Information)
.build();

connection.start().then(function () {        
    document.getElementById("p_nets").innerHTML = "IenStateHub is   'CONNECTED'";               
});

connection.on("IenStateDb", function(message){      
  var dbitem; 
  for (dbitem in message) 
  {            
    document.getElementById("p_nets").innerHTML  = "NetId:" + dbitem.NetId;                
  }       
}); 

p_nets ”是“ Index.cshtml ”中的HTML元素。中心客户端(IenStateHub.js)如下所示附加在Index.cshtml的末尾:

<script src="~/lib/signalr/signalr.js"></script>
<script src="~/js/IenStateHub.js"></script>

我们非常感谢您为解决此解析问题提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

尝试使用此方法在客户端检查您的消息:

connection.on("IenStateDb", function(message) {  
  message.forEach(function(dbitem, index, array) {
     console.log(dbitem);//should output your db item into the browser console.
     //document.getElementById("p_nets").innerHTML  = "NetId:" + dbitem.NetId;  
  });
}); 

答案 1 :(得分:0)

以下方法有效:

$.each(message, function(index, obj) {
    console.log( index + ": " + obj );
    $.each(obj, function( key, value ) {
        console.log( key + ": " + value );
      });
 });

这基于link @Roman Koliada 提到)中描述的一种方法。

现在,我不确定这是否是访问每个项目/对象中不同元素的最有效方法。