2011-07-23 8 views
2

J'ai une vue fortement typée avec mon viewmodel qui contient un objet Person et une liste de compétences. La personne est assez simple. J'utilise des helpers Html comme ceci @Html.TextBoxFor(m => m.Person.FirstName). Je soumets mon formulaire et obtiens ce que je veux.Question à propos de JSON et Sérialisation

Le problème est ma liste de compétences.

Avec un appel AJAX, j'obtiens un résultat JSON qui est un tableau de compétences.

Comment dois-je envoyer la combinaison des compétences et de la personne à ma méthode HTTPPOST?

Je vois deux possibilités.

  1. Celui que je préfère, mais ont aucune idée sur la façon de mettre en œuvre de manière correcte: se débrouillent pour obtenir ce JSON résultat dans mon viewmodel (List<Skill> skilllist) et utilisez le bouton standard envoyer et recevoir en ma méthode HTTPPOST comme ça. (Voir commentaires en ligne)

    [HttpPost] 
    public ActionResult RegisterPersonAndSkills(PersonSkillViewModel model) 
    { 
        // I can acces the Person object and its properties 
        string firstname = model.Person.FirstName; 
    
        // It would be awesome if I could access the list which used to be a JSONresult 
        string skillname = model.SkillList[0].SkillName 
    
        return null; 
    } 
    
  2. Essayez transformatrice, sérialisation tout ce qui est sous la forme (personne partie d'objet) en un résultat JSON, insérez le tableau de compétences résultat JSON je dans ce viewmodel sérialisés et recevoir le modèle par la façon de relier le modèle. Avec le même résultat que la méthode post ci-dessus. Encore une fois, je ne suis pas sûr de savoir comment mettre en œuvre ceci et comment gérer les problèmes de validation possibles. Il semble beaucoup de travail pour sérialiser toutes les propriétés de Person dans JSON, et ajouter l'objet Person et le tableau de compétences à un PersonSkillViewModel JSON.

Comment pourriez-vous résoudre ce problème?

Ou est-ce simplement impossible d'obtenir les deux résultats dans un paramètre?

Répondre

2

La manière la plus simple d'obtenir le résultat n ° 1 souhaité est d'ajouter le DOMAINE DE COMPÉTENCES que vous avez reçu dans l'appel AJAX au DOM via le côté client des champs cachés. Vous devrez utiliser la convention de nommage que le classeur par défaut utilise (Je n'ai pas VS ouvert, mais si vous remplissez votre tableau de compétences sur la méthode GET et ajoutez un pour chaque avec un Html.HiddenFor <> vous devriez voir la syntaxe.)

Donc, fondamentalement, vous aurez besoin de JS pour traiter le côté client de la demande JSON et l'ajouter au DOM ... ceci est juste quelques lignes avec Jquery, mais vous n'avez pas mentionné comment votre obtiennent le tableau de compétences Ajax demande.

+0

C'était exactement ce dont j'avais besoin. Je pensais trop à JSON et à la reliure. Merci mec. – BBQ