2016-12-26 3 views
0

Ich habe ein Thema mit dem gleichen Problem gesehen und ich habe die Antwort verfolgt, aber immer noch kann dies nicht funktionieren, hoffe, Sie können mir sagen, was ich bin falsch machen. Ich versuche, eine Liste von Objekten (usernames) vom Hub an den Client zu senden, aber die Ausgabe, die ich bekomme, ist [Objekt Objekt]. Hier ist meine Klasse mit nur 1 Objekt in es:SignalR Liste der Objekte von Hub-Klasse an den Client senden

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

In meiner Nabe Klasse Ich schaffe die Liste, habe ich versucht, die statische Modifikator öffentlichen zu ändern, aber dasselbe Ergebnis:

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

ich habe eine Methode mit try/catch Aussage, wo ich einige Dummy-Daten in dem Fang setzte für den Test. Bereits es gedebuggt wird der Fang richtig genannt und meine Objekte sind in der Liste:

  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); 
      } 

Und auf meinem Client-Seite habe ich:

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); 
    } 

Die Ausgabe lautet:

  • [ Objekt Objekt]
  • [Objekt Objekt]
  • [Objekt Objekt]

Ich habe die other topic verfolgt, damit es funktioniert, aber immer noch nicht herausfinden kann. Also habe ich meine catch-Anweisung wie folgt geändert:

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(); 
    } 

und meine Client-Seite:

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); 
    } 

Der Ausgang wird this. Besser, aber immer noch nicht das, was ich erwartet habe. Was mache ich falsch? Danke im Voraus!

Antwort

0

Ihr erster Versuch war gut. Und du hast kein Signalgeberproblem. Es ist JavaScript-Problem.

müssen Sie einfach diesen

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

zu, dies ändern:

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

Ihr zweiter Versuch ziemlich verrückt ist. Sie senden string an UpdateWaitingUsrList und dann iterieren Sie darauf. Also natürlich hast du so verrückte Ergebnisse mit einer Liste voller JSON-Zeichen.

+0

Zuerst, vielen Dank, du hilfst mir zum zweiten Mal mit meinem Schulprojekt! Wenn ich richtig verstanden habe, sollte ich bei der ersten Version bleiben und nur das Javascript ändern. Aber jetzt bekomme ich 3 mal "undefiniert". Ich habe auch die Rechtschreibung überprüft, da in deiner Zeile "waitingUsrName" mit kleinem Buchstaben steht, meins ist mit Kapital, weiß nicht, ob das wichtig ist, aber ich habe beides und dasselbe Ergebnis versucht - undefined 3 mal. –

Verwandte Themen