2010-07-25 8 views
0

Je récupère la plupart de mes données en tant que modèles à partir de mon application MVC et je les exploite uniquement du côté client. Quand j'en ai fini avec tout ce que fait l'utilisateur, je ne fais que renvoyer le modèle/tableau de modèles au serveur.Les modèles publiés (via jQuery) reviennent avec toutes les propriétés définies par défaut

Dans un scénario spécifique, je poste un tableau contenant deux modèles dans l'application. Je peux voir toutes les valeurs du modèle dans le HTTP ... mais quand elles sont désérialisées et passées à mon contrôleur elles sortent "vides" - c'est-à-dire, toutes les propriétés sont définies à leurs valeurs par défaut, mais la collection a deux éléments en elle.

Une idée de ce qui pourrait être la cause de cela? Il semble que MVC ne soit pas capable de désérialiser le HTTP pour les objets fortement typés, mais je ne vois pas pourquoi tout "semble" OK dans le HTTP. Y a-t-il un processus que je pourrais manquer?

Si c'est important, j'ai essayé de "recevoir" des données en tant que paramètres formels de type IList et MyModel [] ... ne semble pas aider.

difficile pour moi de trouver un code spécifique, mais ici va - peut-être cela vous aidera

// Client side 

var models = new Array(); 
for(var i in selectedModels) { 
    var item = selectedModels[i]; 

    if(typeof(item) != 'function') { 
     models.push(item); 
    } 
} 

$.ajax({ 
    type: "POST", 
    data: { myModels: models, name: "" }, 
    dataType: "json", 
    url: "/json/my-controller/create-models", 
    success: function (data, successCode, httpRequest) { 
     // Do some stuff 
    } 
}) 

// Server Side 

[HttpPost, ActionName("create-models")] 
public ActionResult DoSomething(MyModel[] myModels) 
{ 
    if(myModels == null || myModels.Length < 1) 
    { 
     throw new InvalidOperationException("You must provide at least one model to add to the collection."); 
    } 

    // Do someother stuff... 
    return Json(someNewModel); 
} 

Répondre

2

Voir ce post blog. Vous devez utiliser la bibliothèque json2.js pour procéder à la mise en forme des données avant publication. La méthode stringify permet de sérialiser les structures de données JavaScript pour le transfert sur http. Vous avez ensuite besoin d'un classeur modèle JSON pour aider à reconstruire le côté serveur d'objets.

Votre code js ressemblerait à ceci:

var models = new Array(); 
for(var i in selectedModels) { 
    var item = selectedModels[i]; 

    if(typeof(item) != 'function') { 
     models.push(item); 
    } 
} 

var postdata = JSON.stringify(models); 

$.ajax({ 
    type: "POST", 
    data: postdata , 
    dataType: "json", 
    url: "/json/my-controller/create-models", 
    success: function (data, successCode, httpRequest) { 
     // Do some stuff 
    } 
}) 
+0

Blah, a été l'espoir d'éviter cette étape supplémentaire ... merci, je vais voir si cela aide demain matin. –

Questions connexes