2010-09-28 11 views
0

J'essaie d'utiliser la fonction jquery ajax pour publier une action de contrôleur MVC2, mais mes paramètres incluent un tableau d'une classe personnalisée (simple) et l'action n'obtient pas les données correctement.j'utilise la méthode jquery .ajax() pour transmettre des données agrégées à l'action mvc2

Client:

var element1 = { FirstName: 'Raymond', LastName: 'Burr' }; 
var element2 = { FirstName: 'Johnny', LastName: 'Five' }; 
var var2 = [element1, element2]; 
var var1 = 'some string';  
var parms = { 
    var1: var1, 
    var2: var2 
}; 
var ajaxArgs = { 
    type: "POST", 
    traditional: true, 
    url: "/Home/Test1", 
    data: parms, 
    dataType: "json", 
    success: returnSuccess, 
    error: returnError 
}; 

$.ajax(ajaxArgs); 

Serveur:

[HttpPost]                 
public ActionResult Test1(string var1, List<TestParameterClass> var2) { ... } 

public class TestParameterClass    
{           
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

2 cas qui fonctionnent déjà: 1) Utilisation d'une liste < _string> comme paramètre d'action et la modification du tableau javascript pour une chaîne tableau .
2) en utilisant un TestParameterClass en tant que paramètre d'action et en passant une instance de la classe personnalisée.

Donc le vrai truc semble être d'obtenir un tableau d'une classe personnalisée réussie avec succès et avec d'autres paramètres flat (string).

Des idées pour que cela fonctionne? Y a-t-il aussi de la documentation sur comment MVC2 traduit le paramètre à un certain type de C# (j'ai utilisé la liste <> seulement b/c il semble le plus largement utilisé)?

Merci!

Répondre

0

Ah, le Model Binder. La source de tant de magie et la cause de tant de malheur quand il s'agit de .NET MVC. Le classeur modèle est ce qui transforme les paramètres en objets, et parfois c'est un peu difficile de savoir ce que vous lui passez.

Dans ce cas particulier, je pense que ce que vous voulez est de passer des paramètres sous forme

"people[0].FirstName": "Raymond", 
"people[0].LastName": "Burr", 
"people[1].FirstName": "Johnny", 
"people[1].LastName": "Five" 

En fait, si vous passez le modèle liant un type de collecte, il veut que les paramètres à être nommés avec indices de type tableau (numéro de parenthèse), puis le nom de la propriété. Au moins, c'est ce qui a fonctionné pour moi. Je ne suis pas un ninja MVC.

0

Je voudrais essayer de savoir si l'appel AJAX est faux ou si la liaison du modèle d'entrée sur le serveur est erronée. Utilisez Firebug ou Fiddler pour inspecter l'appel AJAX et plus particulièrement les données POST. Si cela semble correct, alors le problème est probable dans la liaison du modèle.

vérifier ce poste pour une « documentation » de l'analyse syntaxique de la liste: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

autre chose à faire est de créer une page échantillon avec une forme qui imite que les données vous passez via AJAX. Si vous pouvez obtenir le formulaire POST et que le modèle se lie correctement, il est probable que votre appel AJAX fonctionnera également.