2010-04-08 2 views
5

Je voudrais passerComment passez-vous un objet JSON à un paramètre d'action MVC?

{"id":1, "name":"stackoverflow", "parameter2":false, "parameter3":true} 

Pour mon action

public JsonResult Action(int id, string name, bool parameter2, bool parameter3) 
{ 
    //... 
} 

utilisant JQueries méthode ajax utilisant le JSON comme paramètre de données

$.ajax({ 
    url: "target.aspx", 
    data: {"id":1, "name":"stackoverflow", "parameter2":false, "parameter3":true}, 
    success: handleResponse 
}); 

Je peux voir dans Fiddler mon objet JSON est envoyé, mais ils ne sont pas liés à mes paramètres d'actions. Comment puis-je les amener à se lier aux paramètres?

Je ne veux pas me lier à un objet sur une action qui contient mes valeurs, c'est-à-dire que je ne veux pas Action (MyCustomObjectToAcceptParameters json) Je veux que chaque propriété JSON se lie à chaque paramètre de l'action. Si je passe mes paramètres en tant que chaîne de requête tout fonctionne, mais JSON est beaucoup plus facile à construire/maintenir que beaucoup de valeurs de chaîne de requête, donc j'aimerais que mon json soit lié à chaque paramètre de mon action. Je n'ai pas besoin de lier des types complexes avec des datamembers, juste des chaînes simples, ints et booléens.

+0

Pouvez-vous publier votre code d'appel jQuery actuel? – tzaman

+0

L'avez-vous essayé sans les guillemets sur les noms de variables? Voir la réponse @ Ryan. Cela devrait faire ce que vous voulez (si je le comprends correctement) – SlackerCoder

Répondre

2

Je vois @womp supprimé sa réponse en fonction de mes commentaires alors voici la solution. Vous pouvez transmettre un objet JSON en tant que paramètre data. Voir here pour des exemples.

$.ajax({ 
    url: "target.aspx", 
    data: {parameter1: true, parameter2: false, parameter3: true}, 
    success: handleResponse 
}); 
+0

Si c'est ce que vous avez fait, pouvez-vous utiliser Firebug pour confirmer que les paramètres sont réellement dans la requête? Ou vous pouvez définir un point d'arrêt dans votre contrôleur et vérifier le HttpContext. – Ryan

+0

Voici comment je passe mes paramètres, mais comment puis-je les faire se lier à mes paramètres d'actions (pas un objet des paramètres d'actions); – TimTam

+1

Utilisez-vous le classeur par défaut? Cela devrait juste fonctionner. – Ryan

0

Le liant/filtre est excellent. Pour un contrôle plus précis sur le mappage des noms json < -> propriétés de classe métier, utilisez l'attribut [DataMember] sur les propriétés et [DataContract] sur la classe. Voir DataContractJsonSerializer.

+0

Cela ressemble à la liaison pour les propriétés sur un objet. Je veux me lier aux paramètres de l'action (donc je n'ai pas besoin de créer un autre objet) – TimTam

Questions connexes