2010-03-11 12 views
54

In meiner speziellen Situation habe ich ein paar Lösungen für mein Problem. Ich möchte herausfinden, welches machbarer ist. In diesem Fall kann ich auch mein Ziel erreichen, indem ich ein JSON-Objekt von meinem serverseitigen Code zurücksende. Ich weiß jedoch nicht, wie es gemacht wird und wie es am besten funktioniert.JSON-Objekt von einer ASP.NET-Seite zurückgeben

Zunächst einmal brauche ich keine vollständige Aspx-Seite, da ich nur eine Antwort vom Code zurückgegeben brauche. Verwende ich also Webdienste, einen Handler oder gibt es andere spezifische Möglichkeiten, dies zu tun?

Ist diese Lösung durchführbar? Erstelle ich die JSON-Zeichenfolge mit der StringBuilder-Klasse und injiziere diese Zeichenfolge in die aspx-Zielseite? Gibt es Vorsichtsmaßnahmen oder Dinge, die mir bewusst sein sollten?

Ich schätze Ihre Ideen.

Grüße,

Kemal

------------ UPDATE! ------------

Angenommen, ich habe ein JSON-Objekt in meiner userlist.aspx Seite, die mit jQuery ... ich benutze dann

{"menu": { 
    "id": "color1", 
    "value": "color", 
    "popup": { 
    "menuitem": [ 
     {"value": "Red"}, 
     {"value": "Green"}, 
     {"value": "Yellow"} 
    ] 
    } 
}} // example taken from the json.org/example page 

Nun, wenn ich eine neue Menüpunkte aus meiner aspx Seite hinzufügen möchten, was muss ich tun ... ich denke, so meine Frage an ist spezifischer ...

Lassen Sie uns annehmen, dass ich eine neue Schnur in meinem aspx Code, als solcher "{"value": "Blue"}. Wie kann ich dies in die bereits vorhandene Artikelliste auf der Zielseite einfügen? Oder ist das nicht der richtige Ansatz für diese Art von Situation? Wenn nicht, wie kann es sonst erreicht werden?

Auch wenn ich ein jQuery-Ereignis auslösen wollte, wenn ein neues Element zu dieser Liste hinzugefügt wird, wie wird dies erreicht?

------------ UPDATE 2 am 26. August 2015 ------------

Als ich diese Frage gestellt, die Art und Weise Ich habe mich dem Problem in einem anderen Aspekt genähert. Ich bin jetzt kompetenter in dem Thema und kann die am meisten gewählte Antwort gerne annehmen, da der Ansatz zu dieser Frage eindeutig nicht den bereits vorhandenen JSON enthalten und einen neuen aus dem Code ausgeben soll, wie @DavGarcia ebenfalls andeutet.

Antwort

108

In Ihrem Page_Load werden Sie die normale Ausgabe löschen und schreiben Sie Ihre eigene, zum Beispiel:

string json = "{\"name\":\"Joe\"}"; 
Response.Clear(); 
Response.ContentType = "application/json; charset=utf-8"; 
Response.Write(json); 
Response.End(); 

um ein C# Objekt zu konvertieren JSON können Sie eine Bibliothek wie Json.NET verwenden.

Anstatt Ihre .aspx-Seite zur Ausgabe von JSON zu verwenden, sollten Sie einen Webdienst (asmx) oder WCF verwenden, die beide JSON ausgeben können.

+0

ok Ich aktualisiere meine Frage. –

+1

Aktualisierte Antwort, um Response.End() einzuschließen, andernfalls können Seitensteuerelemente gerendert werden –

+0

Eines der Probleme, mit denen wir konfrontiert wurden, ist - Wenn Ihre Seite komplex ist und mehrere Benutzersteuerelemente hat und eine Ihrer Seiten auf ein Cookie prüft und wenn es nicht vorhanden ist, versucht es einzustellen. Dadurch wird immer der Fehler "Server kann Cookies nicht ändern, nachdem HTTP-Header gesendet wurden" fehlgeschlagen. –

11

kein Problem, es mit ASP zu tun .... es ist am natürlichsten, dies mit MVC zu tun, kann aber auch mit Standard-ASP getan werden. Das MVC-Framework hat alle Arten von Hilfsklassen für JSON, wenn Sie können, würde ich vorschlagen, in einigen MVC-Liebe, wenn nicht, können Sie wahrscheinlich einfach die JSON-Hilfsklassen von MVC verwenden und verwenden sie im Kontext von asp.net.

edit:

hier ist ein Beispiel dafür, wie JSON-Daten mit MVC zurückzukehren. Dies wäre in Ihrer Controller-Klasse. Dies ist eine Out-of-the-Box-Funktionalität mit MVC - wenn Sie ein neues MVC-Projekt erstellen, wird dieses Zeug automatisch erstellt, also ist es nichts besonderes. Die einzige Sache, die ich mache, ist ein actionResult, das JSON ist. Die JSON-Methode, die ich rufe, ist eine Methode auf der Controller-Klasse.Das ist alles sehr einfach, Standard-MVC Zeug:

public ActionResult GetData() 
{ 
    data = new { Name="kevin", Age=40 }; 
    return Json(data, JsonRequestBehavior.AllowGet); 
} 

Diese Rückkehr Daten könnten auf diese Weise über JQuery als Ajax-Aufruf aufgerufen werden:

$.get("/Reader/GetData/", function(data) { someJavacriptMethodOnData(data); }); 
+2

danke für die Antwort, ich benutze MVC nicht, sondern werde in die Forschung ausgehend von Ihrer Antwort einsteigen. Kannst du mir dabei einige Ressourcen zur Verfügung stellen, die du bereits kennst? –

11

Mit ASP.NET-Webseiten können Sie dies auf einer einzigen Seite tun als ein grundlegendes GET-Beispiel (die einfachste mögliche Sache, die arbeiten kann.

var json = Json.Encode(new { 
    orientation = Cache["orientation"], 
    alerted = Cache["alerted"] as bool?, 
    since = Cache["since"] as DateTime? 
}); 
Response.Write(json); 
+3

Ich musste dies nachschlagen, so dass jemand sonst nicht weiß, dass Json Objekt System.Web.Helpers.Json - Wenn Wenn Sie diese DLL nicht bereits referenzieren oder nicht, können Sie System.Web.Script.Serialization.JavaScriptSerializer verwenden, das über dasselbe funktioniert. – eselk

+0

@Scott - Wenn Sie ein Recordset auf einer einzelnen ASP.net-Seite durchlaufen würden, wie würden Sie sie gruppieren (anstatt wie in Ihrem Beispiel individuell)? – webdad3

0

Wenn Sie Code zurückbekommen, Verwenden Sie einige wie folgt

 MyCustomObject myObject = new MyCustomObject(); 
     myObject.name='try'; 
     //OBJECT -> JSON 
     var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
     string myObjectJson = javaScriptSerializer.Serialize(myObject); 
     //return JSON 
     Response.Clear();  
     Response.ContentType = "application/json; charset=utf-8"; 
     Response.Write(myObjectJson); 
     Response.End(); 

So geben Sie ein JSON-Objekt mit allen Attributen von MyCustomObject serialisiert zurück.

Verwandte Themen