Search

Archiv

Suche

Liste

Blog - Christian Wirth

Jul 30

Written by: Christian Wirth
30.07.2009 17:27 

Der standard Weg um ASP .NET Seiten zu ajaxen ist momentan das ajaxToolkit würd ich sagen.

Die DevExpress Komponenten bieten jedoch eigene Mechanismen, wie das ASPxCallbackPanel, den ASPxCallback oder das ASPxGridView und die ASPxTreeList auf denen man in JavaScript per PerformCallback einen AJAX Request auf den Server absetzen kann. Arbeitet man auschließlich mit DevExpress kann man auf die Funktionalität des ajaxToolkit deshalb gut verzichten.

Der PerformCallback Funktion übergibt man als Parameter einen String, welchen man auf dem Server auswerten kann. Serverseitig übergibt man dann den
CallbackEventArgs wiederum einen String (e.Result) welchen man dann clientseitig in dem CallbackComplete Event verwenden kann:

 

Callback Definition:

 

<dxcb:ASPxCallback ID="cb" runat="server" ClientInstanceName="cb" OnCallback="cb_Callback" ClientSideEvents-CallbackComplete="cbComplete" />

 

Callback auslösen:

 

function doCb () {

  cb.PerformCallback('Welt');

}

 

Handler serverseitig:

 

protected void cb_Callback(object s, CallbackEventArgs e)

{

  e.Result = "Hallo " + e.Parameter;

}

 

Handler clientseitig:

 

function cbComplete (s, e) {

  alert(e.result);

}

 

So weit so gut… Oder schlecht? Nur Strings als Parameter??? Ein bischen unelegant, unpraktisch und so gar nicht objekt orietiert!

Die Alternative: JSON, die javascript object notation.

Damit können wir sowohl client- als auch serverseitig mit Objekten arbeiten. Diese Objekte serialisieren wir in einen JSON String, welchen wir als Callback-Parameter verwenden können und welcher sich vom Empfänger einfach deserialisieren lässt.

 

Hätten wir also jeweils zwei JavaScript und C# Functionen:

 

string s = ToJSON(object o);

object o = FromJSON(string s);

 

sähe die Kommunikation schon eleganter aus.

 

Bitte sehr:

http://www.thomasfrank.se/downloadableJS/jsonStringify.js

http://james.newtonking.com/projects/json-net.aspx

 

Ok, clientseitig die JavaSript Datei einbinden, serverseitig eine Referenz auf Newtonsoft.Json und los gehts:

 

Callback auslösen:

 

function doCb () {

 

  var customer = new Object();

  customer.Id = 1;

  customer.FirstName = "Hans";

  customer.LastName = "Dampf";

  customer.Orders = new Array("a", " b");

 

  cb.PerformCallback(JSONstring.make(customer));

}

 

Handler serverseitig:

 

public class Customer

{

  public long Id { get; set; }

  public string FirstName { get; set; }

  public string LastName { get; set; }

  public List<string> Orders { get; set; }

}

 

protected void cb_Callback(object s, CallbackEventArgs e)

{

  Customer c = JsonConvert.DeserializeObject<Customer>(e.Parameter);

  c.Orders.Add("c");

     

  e.Result = JsonConvert.SerializeObject(c);

}

 

Handler clientseitig:

 

function cbComplete (s, e) {

  var c = JSONstring.toObject(e.result);

  alert(c.Orders.length);

}

 

Tags:

1 comment(s) so far...

Re: AJAXen mit DevExpress und JSON

Thanks! If you are trying to locate files which are stored on the Rapidshare server, I recommend to try rapidsharemix - Rapidshare Search engine ( rapidqueen.com ) now!

By Ashley on   14.06.2010 13:39

Your name:
Your email:
(Optional) Email used only to show Gravatar.
Your website:
Title:
Comment:
Security Code
Enter the code shown above in the box below
Add Comment   Cancel 
Copyright 2007
Datenschutzerkläung   |   Nutzungsbedingungen