2017-04-04 1 views
0

j'ai un MVC3 action du contrôleur:ne pouvez pas poster un tableau de chaîne à ASP.NET MVC3

public ActionResult DoStuff(DoStuffModel model) 

Le DoStuffModel ressemble à ceci:

public class DoStuffModel 
{ 
    public long SomeId { get; set; } 
    public List<string> Codes { get; set; } 
} 

Dans mon jQuery je ceci:

var postData = { 
    SomeId: 1, 
    Codes: ["code1", "code2", "code3"] 
}; 

$.post(url, postData, function (data) {}); 

L'URL est correcte. Les postData ressemble à ceci quand je LOGGUE:

enter image description here

Le SomeId correctement lié obtient, mais Codes reste nulle. Que se passe-t-il?

+0

Votre modèle attend un tableau appelé Codes, mais dans vos dev-tools, il montre que dans l'objet javascript, le nom du tableau est PiCodes. Pouvez-vous vérifier si cela aide? – MarioMucalo

+0

Juste une supposition, mais avez-vous essayé 'public string [] Codes {get; ensemble; } ' –

+0

Mauvais screenshoting de ma part, désolé. Les noms correspondent bien. – ohyeah

Répondre

1

Vous devez utiliser la méthode $.ajax() et définir les bonnes options ajax et de mettre en forme vos données.

La méthode $.post() envoie les données application/x-www-form-urlencoded; charset=UTF-8, ce qui signifie que vous devez générer la collection avec indexeurs pour que le DefaultModelBinder lier - par exemple

var postData = { SomeId: 1, 'Codes[0]': 'code1', 'Codes[1]': 'code2', 'Codes[2]': 'code3'}; 

Le code en utilisant votre objet courant contenant un tableau serait

$.ajax({ 
    url: url, 
    type: 'post', 
    contentType: 'application/json', 
    data: JSON.stringify({ model: postData }) 
    success: function(data) { 
     .... 
    } 
}); 
+0

Merci pour l'aide! Cependant, '[0] .Codes' ne semble pas être une syntaxe correcte. Mon Intellisense semble s'en plaindre au moins. – ohyeah

+0

Désolé, vous avez oublié les guillemets (notez que vous pouvez également utiliser "Codes [0]" dans ce cas (collection d'objets simples) –

+0

Comme vous envoyez un JSON, vous n'avez pas besoin d'utiliser 'Codes [0]'. L'OP original 'postData' était correct, il manquait juste l'en-tête' application/json' –