2009-07-22 5 views
0

Je souhaite passer un objet JavaScript imbriqué à ma méthode d'action ASP.NET MVC. Voici le code (simplifié):Comment passer un objet JavaScript imbriqué à ASP.NET MVC Action Method?

$.getJSON('some/url', 
       { 

        index: pageIndex, 
        pageSize: pageSize, 
        filter:{one:'one',two:'two',three:'three'} 
       },someCallBack(msg) 
     ); 

J'utilise jQuery et mis en œuvre mon plugin qui va chercher paresseusement données paginés du serveur. Cela fonctionne tout le charme, mais maintenant je dois passer un objet JavaScript 'Filter' avec un nombre variable de propriétés-filters. Du côté serveur, j'obtiens un tableau d'objets où le premier élément est une chaîne, contenant le littéral '[Object object]'.

De toute évidence, mon objet imbriqué (filtre) n'est pas développé et transformé en objet (hachage) côté serveur. Est-ce possible?? Je ne veux pas coder dur mes filtres, puisque le plugin est destiné à être appliqué à l'envers.

Merci beaucoup.

Répondre

3

Vous pouvez utiliser System.Web.Script.Serialization.JavaScriptSerializer pour envoyer/recevoir des données JSON sérialisé:

JavaScriptSerializer js = new JavaScriptSerializer(); 
Filter f = js.Deserialize<Filter>(json_str); 

Plus de détails here. Pour coder les données JSON à envoyer au serveur, utilisez une bibliothèque de sérialisation JSON pour JavaScript comme json2.js. Puis envoyez la requête comme ceci:

var filter = {field1: 'value1', field2: 'value2'} 

$.ajax({ 
type: "POST", 
url: '/server/path', 
data: { filter: JSON2.stringify(filter) }, 
dataType: "json", 
success: function(data) { 
    // do something 
} 
}); 
1

JSON serait parfait pour cela. Fondamentalement, vous aurez envie de convertir votre objet à sa représentation JSON, puis l'envoyer à travers le fil. Une fois qu'il est disponible sur le serveur, vous pouvez le traiter comme vous le souhaitez. Crockford a un great article sur ce que JSON est, comment comprendre la notation, et il fournit un outil pour convertir vos objets en notation JSON.

1

Vous pouvez utiliser la bibliothèque js lib json2 library suivante, vous pouvez ensuite utiliser la méthode stringify pour vous assurer que votre json est au format correct pour le service.

var data0 = {one:'one',two:'two',three:'three'} 

var json = JSON2.stringify(data0); 

$.ajax({ 
type: "POST", 
url: someServiceUrl, 
data: json, 
contentType: "application/json; charset=utf-8", 
dataType: "json", 
success: function(msg) { 

} 
}); 
Questions connexes