2017-05-15 2 views
0

Ich versuche, eine Webformularseite mit einer Anzahl von Code-Behind webmethod Funktionen in eine MVC-Ansicht mit einem Controller zu konvertieren.Rückgabe JSON über MVC-Controller vs Webmethod

Die Daten, die ich zurückbekomme, sind anders. Sie haben JSON richtig formatiert, aber die Webmethod gibt JSON wie folgt aus:

{"d":"{\"Success\":true,\"Data\":{\"QuoteId\":340439,\"LoginId\":40, 

und die Steuerung kehrt:

"{\"QuoteId\":340444,\"LoginId\":40, 

Sein nicht in data.d Umwickeln wie es eingerichtet wird, in der JavaScript zu handhaben und Es gibt keine Success oder Data Objekte. Und wenn ich versuche, es zu analysieren ($.parseJSON(data)) wie ich mit der webmethod tat, gibt es mir den alten Fehler in Zeile 1 Nachricht.

Ich bin mir sicher, dass ich, wenn ich genug damit gespielt habe, mit der Art und Weise, wie die Daten durchkommen, arbeiten kann, aber ich habe viele Seiten, die ich in Zukunft verdecken muss und ich frage mich nur ob Es gibt einen einfachen Weg, um den Controller zu formatieren, wie die webmethod tut.

Ich bin mir ziemlich sicher, dass ich weiß, warum die Daten anders formatiert sind, aber es würde mein Leben einfacher machen, wenn ich die Daten einfach auf die gleiche Weise zurückgeben könnte. Ich habe versucht, eine JsonConvert.SerializeObject(obj), die nur eine Zeichenfolge ist, und eine Return Json(obj), die ich denke, ist nur eine Zeichenfolge als auch, aber sie beide zurück, die gleiche, nicht-dat.d Weg zurückgeben.

+1

Warum also nicht ein neues Objekt erstellen, um die Antworten zu umbrechen, wenn Sie möchten, dass es dasselbe JSON zurückgibt, das es zuvor zurückgegeben hat? 'public class JsonResponseWrapper {public bool Erfolg {get; set;} public object Daten {get; Set;}} etwas in diese Richtung. – mason

+0

@mason Ich habe das versucht, aber aus irgendeinem Grund formatiert es die Daten nicht gleich. Ich kann es dazu bringen, im Wesentlichen gleich zu "schauen", aber es wirft Fehler nach unten in der JS, wo die Webmethode dies nicht tut. –

Antwort

0

Okay, also habe ich beschlossen, die Daten in ein "d" zu wickeln, so dass ich eine "data.d" im Ajax-Ergebnis haben kann.

Aber aus irgendeinem Grund sind die Daten nicht korrekt formatiert werden, wenn ich die Daten über senden Sie einfach zurück:

return Json(thewrappeddata); 

sie seltsam ausfallen.

Also im Grunde, was ich zu tun habe, ist dies:

public class JSONReturn { 
    public object d; 
    public static object Wrap(object data) { 
     return new JSONReturn() { d = data }; 
    } 
} 

var thedata = new TonsofData(); 

return Json(
    JSONReturn.Wrap(
     JsonConvert.SerializeObject(thedata, 
      new JsonSerializerSettings { 
       ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore 
      } 
     ) 
    ) 
); 

Es scheint, wie ich mit Json() mit JsonConvert.SerializeObject() und einmal „jsonifying“ die Daten zweimal hier, einmal bin (ich glaube, dass serialisiert), aber es scheint zu funktionieren und jetzt bekomme ich, was ich brauche und das ganze JS funktioniert genauso wie vorher. Wenn ich die JsonConvert.SerializeObject() weglassen, formatiert die Json() die Daten falsch und es verursacht alle Arten von Fehler auf der ganzen Linie.