Envoi de plusieurs éléments au contrôleur MVC via jQuery.Ajax

Si vous sérialisez un formulaire à l’aide de quelque chose comme jQuery, des clés et des valeurs JSON seront mappées sur les propriétés d’un object de l’action du contrôleur sur lequel vous écrivez. Alors:

jQuery:

function PostForm() { $.ajax({ url: "/Home/TestMVC", type: "POST", dataType: "application/JSON", data: $('#form').serialize(), complete: callFunction } }); 

En supposant que les détails principaux contiennent des éléments qui auront le nom du paramètre comme clé, ils doivent mapper directement à l’object:

Action:

 public void TestMVC(MyObject obj) { //Obj should now contain the data from the serialised form } 

POSTER:

 Name: "Bob" Age: "999" Sex: "Unknown" 

Est-ce que quelqu’un sait comment cela fonctionne? Cela casse à chaque fois que je transmets le formulaire et toutes les données supplémentaires au contrôleur.

J’aimerais envoyer le contenu des données ainsi qu’un QuerySsortingng pouvant contenir n’importe quel nombre et types de paires clé / valeur au contrôleur. Je peux extraire ces paires clé / valeur sur le serveur car je ne peux pas créer d’object pour elles sur la signature de la méthode. Cependant, cela ne fonctionne pas comme prévu.

jQuery:

 function PostForm() { $.ajax({ url: "/Home/TestMVC", type: "POST", dataType: "application/JSON", data: { Obj: $('#form').serialize(), TheWeirdQuerySsortingng: $('.additionalParams').serialize(), } }); }; 

Action:

 public void TestMVC(MyObject obj, Ssortingng TheWeirdQuerySsortingng) { //Obj now does NOT contain the element, it is NULL. Whereas TheWeirdQuerySsortingng works fine. } 

Poster:

 Obj: name=bob&age=999&sex="unknown" TheWeirdQuerySsortingng: param1=1&param2=2 

Je pense que c’est parce que j’ai créé un object JSON en tant que données et que j’ai défini les propriétés avec le nom de l’object.

Il existe une différence dans les valeurs POST qui apparaissent dans Firebug. Lorsque je poste uniquement l’object, les valeurs POST sont toutes les clés de l’object / du formulaire avec leurs valeurs correspondantes. Dans le deuxième exemple, il y a deux propriétés simples, le nom que je leur ai donné, chacune contenant une chaîne QuerySsortingng ( Foo=1&Bar=2 ) et MVC ne peut pas mapper une chaîne QuerySsortingng sur les membres d’un object (ou alors, semble-t-il).

Y a-t-il un moyen de se mettre au travail comme au début, mais aussi d’envoyer des données supplémentaires à un deuxième argument de l’action? J’imagine que c’est pour append une propriété supplémentaire à toutes les propriétés existantes créées lorsque jquery effectue la sérialisation du formulaire.

Le post que je veux réellement est:

 Name: "Bob" Age: "999" Sex: "Unknown" TheWeirdQuerySsortingng: param1=1&param2=2 

Le paramètre dataType de la méthode $ .ajax est le type de réponse (le type de données que vous attendez du serveur), et non une requête. Essayez ceci à la place:

 function PostForm() { $.ajax({ url: "/Home/TestMVC", type: "POST", dataType: "application/JSON", data: $('#form').serialize() + "&" + $('.additionalParams').serialize() }); }; 

ou:

 function PostForm() { $.ajax({ url: "/Home/TestMVC" + "?" + $('.additionalParams').serialize(), type: "POST", dataType: "application/JSON", data: $('#form').serialize() }); }; 

MIS À JOUR:

Essaye ça:

Manette:

 public void TestMVC(MyObject obj, Ssortingng[] TheWeirdQuerySsortingng) { } 

Client:

 function PostForm() { $.ajax({ url: "/Home/TestMVC", type: "POST", dataType: "application/JSON", data: $('#form').serialize() + "&" + $('.additionalParams').serialize() }); }; 

mais côté client, vos parameters supplémentaires doivent être au format suivant:

 TheWeirdQuerySsortingng[0]=param1&TheWeirdQuerySsortingng[1]=param2&...&TheWeirdQuerySsortingng[n]=paramN 

Les éléments so $ (‘. additionalParams’) doivent avoir les atsortingbuts “id” et / ou “name” tels que: TheWeirdQuerySsortingng [1], TheWeirdQuerySsortingng [2] … TheWeirdQuerySsortingng [N]

J’espère que cela t’aides

La donnée est un object

 ... data: { x :$('#form').serialize(), y:'something else' } ... 

Une autre solution si vous voulez un dictionnaire de paires clé / valeur:

 public void TestMVC(MyObject obj, IDictionary TheWeirdQuerySsortingng) { } 

Client:

 function PostForm() { $.ajax({ url: "/Home/TestMVC", type: "POST", dataType: "application/JSON", data: $('#form').serialize() + "&" + $('.additionalParams').serialize() }); }; 

Format $ (‘. additionalParams’). serialize ():

 TheWeirdQuerySsortingng[0].Key=param0&TheWeirdQuerySsortingng[0].Value=value0&TheWeirdQuerySsortingng[1].Key=param1&TheWeirdQuerySsortingng[1].Value=value1&...&TheWeirdQuerySsortingng[n].Key=paramN&TheWeirdQuerySsortingng[n].Value=valueN 

MIS À JOUR:

Vous avez besoin de quelque chose comme ça: