SignalR将Hub类中的对象列表发送到客户端

时间:2016-12-26 11:30:53

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

我看过一个完全相同问题的主题,我已经按照那里的答案,但仍然无法完成这项工作,希望你能告诉我我做错了什么。我正在尝试从Hub向客户端发送一个对象列表(用户名),但我得到的输出是[object Object]。这是我的班级,里面只有一个属性:

public class WaitingUser
{
    public string waitingUsrName{ get; set; }
}

在我的集线器课程中,我正在创建列表,我尝试将静态修饰符更改为 public ,但结果相同:

static List<WaitingUser> WaitingUseresList = new List<WaitingUser>();

我有一个带有 try / catch 语句的方法,我在 catch 中放置了一些虚拟数据用于测试。已经调试它,正确调用catch并且我的对象在列表中:

            catch
            {
               // WaitingUseresList.Add(new WaitingUser { waitingUsrName = userName });
                WaitingUseresList.Add(new WaitingUser { waitingUsrName = "John" });
                WaitingUseresList.Add(new WaitingUser { waitingUsrName = "Mike" });
                WaitingUseresList.Add(new WaitingUser { waitingUsrName = "Steven" });
                Clients.All.UpdateWaitingUsrList(WaitingUseresList);
            }

在我的客户端,我有:

   objHub.client.UpdateWaitingUsrList = function (WaitingUseresList) {
       $('.WaitingUsrs').val('');
       var list = WaitingUseresList;
       for (var i = 0; i < list.length; i++) {
           $('.waitingUsrs').append('<li>' + list[i] + '</li>');
       }               
       var height = $('.waitingUsrs')[0].scrollHeight;
       $('.waitingUsrs').scrollTop(height);
   }

输出结果为:

  • [object Object]
  • [object Object]
  • [object Object]

我已按照other topic使其正常工作,但仍然无法弄明白。所以我改变了我的捕获声明:

    catch
    {
       // WaitingUseresList.Add(new WaitingUser { waitingUsrName = userName });
        WaitingUseresList.Add(new WaitingUser { waitingUsrName = "John" });
        WaitingUseresList.Add(new WaitingUser { waitingUsrName = "Mike" });
        WaitingUseresList.Add(new WaitingUser { waitingUsrName = "Steven" });
        string list = Newtonsoft.Json.JsonConvert.SerializeObject(WaitingUseresList);
        Clients.All.UpdateWaitingUsrList(list);
        Clients.Caller.NoExistAdmin();
    }

和我的客户方:

   objHub.client.UpdateWaitingUsrList = function (list) {
       $('.WaitingUsrs').val('');
       var waitingList = list;
       for (var i = 0; i < waitingList.length; i++) {
           $('.waitingUsrs').append('<li>' + list[i] + '</li>');
       }               
       var height = $('.waitingUsrs')[0].scrollHeight;
       $('.waitingUsrs').scrollTop(height);
   }

输出变为this。更好,但仍然不是我所期望的。我究竟做错了什么?提前致谢!

1 个答案:

答案 0 :(得分:1)

你的第一次尝试很好。而且你没有发出信号问题。这是javascript问题。

只需要改变这个

$('.waitingUsrs').append('<li>' + list[i] + '</li>');

到此:

$('.waitingUsrs').append('<li>' + list[i].waitingUsrName + '</li>');

你的第二次尝试非常疯狂。 您将string发送至UpdateWaitingUsrList,然后迭代。 所以当然你已经得到了如此疯狂的结果,列表中填充了json字符串字符。