【问题标题】:SignalR send list of objects from Hub class to the clientSignalR 将对象列表从 Hub 类发送到客户端
【发布时间】:2016-12-26 11:30:52
【问题描述】:

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

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

在我创建列表的 hub 类中,我尝试将 static 修饰符更改为 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);
   }

输出是:

  • [对象对象]
  • [对象对象]
  • [对象对象]

我已经按照other topic 使其工作,但仍然无法弄清楚。所以我改变了我的 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" });
        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。更好,但仍然不是我所期望的。我究竟做错了什么?提前致谢!

【问题讨论】:

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


    【解决方案1】:

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

    只需要改变这个

    $('.waitingUsrs').append('&lt;li&gt;' + list[i] + '&lt;/li&gt;');

    到这里:

    $('.waitingUsrs').append('&lt;li&gt;' + list[i].waitingUsrName + '&lt;/li&gt;');

    你的第二次尝试太疯狂了。 您将string 发送到UpdateWaitingUsrList,然后对其进行迭代。 所以当然你得到了如此疯狂的结果,列表中充满了 json 字符串字符。

    【讨论】:

    • 首先,非常感谢,您第二次帮助我完成学校项目!如果我理解正确,我应该坚持使用第一个版本并更改 javascript。但现在我得到了 3 次“未定义”。我还检查了拼写,因为在您的行中“waitingUsrName”是小写字母,我的是大写字母,不知道是否重要,但我已经尝试了两个相同的结果 - 未定义 3 次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2018-02-13
    • 2013-07-18
    相关资源
    最近更新 更多