MVC 3 AJAX Post, Liste rempli avec des Objets, mais des Objets Propriétés sont Vides
J'ai le problème suivant:
Sur un Clic de Bouton, je POSTE quelques données sur le serveur.
Mon contrôleur de l'Action ressemble à ceci:
public ActionResult Accept(List<MyViewModel> entries)
{
//here entries HAS 2 MyViewModel-Instances in it.
//The entries are not null, but the values of the instances are!
//entries[0].ParamA is null
}
Où la MyViewModel ressemble à ceci:
public class MyViewModel
{
public string ParamA { get; set; }
public string ParamB { get; set; }
}
Et l'AJAX d'Appel est le follwing:
var myEntries = { entries: [{ ParamA: "A", ParamB: "B" }, { ParamA: "C", ParamB: "D" }] };
$.ajax({
type: 'POST',
url: url,
cache: false,
data: myEntries,
dataType: 'text' });
Ce que j'ai déjà essayé de le faire:
- Changé de type de données pour 'json'
- utilisé: traditionnel: vrai
- essayé var myEntries = JSON.stringify(...);
- essayé var myEntries = { entrées : [JSON.stringify({ ... }), JSON.stringify({ ... })] };
- même que ci-dessus, mais avec jQuery.param(..., true);
- Utilisation de IEnumerable ou MyViewModel[] au lieu de la liste.
- TOUTE combinaison de ce qui précède
Ce que je fais mal?
Merci, merci beaucoup d'avance de m'aider!
MODIFIER
Mon (Rasoir)Vue n'est pas intéressant, à ce moment, comme il n'a rien à voir avec quoi que ce soit. Je ne suis PAS à l'aide de l'un de HTML.TextBoxFor (ou similaire) des Méthodes pour remplir le myEntries-Variable. Il est en fait rempli de manière dynamique (car il ya beaucoup de conditions).
Pour l'amour de la question (et à mes propres tests), j'ai codé en dur de la variable. 🙂
De mon point de Vue n'a rien d'intéressant. Je clearified dans ma question. Voir l'ÉDITION-la Section
J'ai la réponse! Je vais poster dès que je peux (dois attendre 8 heures...)
Quelle est la réponse? 🙂
Voir ma réponse ci-dessous. (Je peux le marquer comme acceptée demain ;))
OriginalL'auteur Shion | 2012-04-11
Vous devez vous connecter pour publier un commentaire.
Avec votre réponse et de l'utilisation de
JSON.stringify
méthode, ça marche pour moiMerci, j'ai eu le même problème sur ma liste remplie, mais toutes leurs propriétés étaient vides. J'ai été en utilisant $.La poste(..) j'ai pensé que c'était juste un wrapper autour de $.ajax(type:'POST', ...), mais il doit y avoir une différence que l'utilisation de l' $.ajax exemple ci-dessus fonctionne très bien.
Je veux juste souligner que le programme d'installation de contentType 'application/json' est critique. Dans mon cas, il n'a tout simplement pas fonctionner sans cette!
OriginalL'auteur Andrew
J'ai eu la réponse!
jQuery peut être déroutant à la fois.
type de données est le paramètre qui indique ce que vous souhaitez récupérer à partir du serveur.
contentType est le paremeter qui spécifie ce que vous ENVOYEZ sur le serveur.
Donc, à partir de l'exemple ci-dessus il fonctionne si vous ajoutez:
contentType: application/json; charset=utf-8',
de l'AJAX à l'appel.
OriginalL'auteur Shion
Juste pour compléter la réponse sur la façon de créer la liste qui sera publier sur le contrôleur. C'est parce que vous n'avez pas besoin d'envelopper le tableau avec le nom de la liste. Il semble laid et n'est pas gérable à l'aide des fonctions intégrées. Cet exemple est ici de montrer comment le message de retour JSON qui MVC de comprendre et d'interpréter comme une Liste de. (Mais même si le Tableau est enveloppé, il fonctionne toujours mais qui est contenu statique et difficile à gérer)
Cet exemple utilisé jQuery sortable de plugin. Je veux mettre l'ensemble de la liste modèle de retour avec la nouvelle commande d'index pour enregistrer dans la base de données.
Et mon contrôleur MVC est aussi simple que ...
OriginalL'auteur ppumkin