2011-06-22 3 views
3

Je rencontre des problèmes de liaison à un objet lors de la liaison à une liste d'objets. Utilisation de Mvc3.1 avec mise à jour des outils.ASP.NET MVC: type complexe de liaison de modèle

Lors de la liaison au formulaire de classe, la fonction HttpPost reçoit le modèle correct. Lors de la liaison au FormViewModel, la fonction HttpPost reçoit un modèle vide.

Y at-il des restrictions lors de la reliure Modèles contenant d'autres modèles?

public class FormViewModel 
{ 
    public Form Form { get; set; } 
} 

public class Form 
{ 
    public List<Section> Sections { get; set; } 
} 

public class Section 
{ 
    public List<Question> Questions { get; set; } 
} 

public class Question 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
} 

Répondre

2

L'attribut name de vos éléments d'entrée est ce que le classeur utilise comme contexte pour faire sa magie. Je pense que votre vue contient quelque chose comme ceci:

@model Form 
@Html.EditorFor(m => m.Sections) 

Et votre méthode post ressemble à ceci:

[HttpPost] 
public ActionResult Function(FormViewModel formViewModel) 
{ 
    // ... 
} 

Si vous changez votre point de vue d'être:

@model FormViewModel 
@Html.EditorFor(m => m.Form.Sections) 

Et votre obtenir une action pour retourner une instance de FormViewModel, cela fonctionnerait probablement très bien. Les helpers utiliseront le corps de l'expression lambda pour créer le nom de l'élément d'entrée. Dans ce cas, il va créer quelque chose comme Form.Sections[0].Field. Ensuite, le classeur de modèle est capable de détecter sur Form.Sections [] et d'initialiser correctement le FormViewModel.

Questions connexes