2011-08-11 3 views
2

J'ai un viewmodel et il a une classe imbriquée ce qui n'est pas en relation avec d'autres classes de modèles. Je peux remplir les données nécessaires dans cette classe imbriquée (ClassX) pour montrer ceux dans la vue mais je ne peux pas extraire des données de la classe imbriquée (via MyViewModel) dans l'action de publication juste quand je la donne en action post comme autre paramètre . Il apparaît dans le viewmodel original (MyViewModel) mais ses attributs sont null/0. Ma question: Puis-je lire les données de la classe imbriquée via la classe viewmodel?ASP.NET MVC 3 classes modèle et viewmodel

+2

Juste une supposition - Je pense que le processus de conversion ne fera que ramener les propriétés. Je pense que vous devez changer "ClassX classX public"; à "public ClassX classX {get; set;}" –

+0

Merci. J'ai essayé votre suggestion et cela a fonctionné. – sada

Répondre

0

Si je comprends bien votre question, vous avez besoin BindAttribute.Prefix sur votre paramètre ClassX cx de la méthode d'action. De cette façon, le classeur de modèle liera correctement les valeurs pour cela. La valeur de Bind.Prefix doit être le nom de la propriété ClassX dans MyViewModel, dans votre exemple, la chaîne - "classX"

// 
// POST: /MyModel/Create 
public ActionResult Create(MyViewModel myvm, [Bind(Prefix = "classX")]ClassX cx, FormCollection collection) 
{} 

Idée est dans ce qui suit - côté client, lorsque vous soumettez le formulaire, ses valeurs sont envoyées au serveur Comme ceci

attrA=someValue 
classX.SomeProperty=someValue 
classX.SomeOtherProperty=someOtherValue 

Lorsqu'ils sont passés aux paramètres d'action, ces paires de chaînes name = value sont traduites en objets. Les noms du côté gauche de l'égalité correspondent aux noms de propriété MyViewModel et le paramètre ClassX reste vide. Mais alors vous spécifiez Prefix = "classX", liant modèle correspond à des chaînes après point dans le côté gauche de l'égalité aux noms de propriété ClassX, de sorte que cela devrait remplir les valeurs de ClassX aussi.

+0

Merci pour votre réponse. – sada