2010-09-14 4 views
1

je la classe viewmodel imbriquée suivante ...mvc.net comment modifier les classes de ViewModel imbriquées

public class CustomerModel 
{ 
    public string name; 
    public Address mailingAddress; 
    public Address billingAddress; 
} 

public class Address 
{ 
    public string line1; 
    public string city; 
    public string country; 
} 

J'espérais qu'il y ait une certaine façon automatisée pour créer une page d'édition, mais tout ce que j'ai try and read indique que le framework et le code-generated ne traitent que les propriétés de niveau supérieur dans votre viewmodel. La propriété 'name' est la seule générée dans la vue et dans l'action, seule la propriété 'name' est remplie avec les adresses laissées comme nulles. Cependant,

[HttpPost] 
public ActionResult Edit(CustomerModel model) 

si j'ajouter manuellement des boîtes d'entrée pour l'adresse (par une vue partielle) et passer à la signature FormCollection pour l'action, je reçois les valeurs d'adresse appropriées saisies à l'écran.

Y at-il une solution simple pour cela autre que la création de ma propre fonction pour convertir de FormCollection à CustomerModel?

Répondre

2

Pourriez-vous utiliser un modèle d'édition ici? Fondamentalement, vous créez une vue partielle fortement typée (l'adresse est le type dans votre cas), la stockez dans un dossier spécifique (/ Views/Shared/EditorTemplates) et chaque fois qu'un éditeur est rendu pour un membre de ce type de données, la vue partielle est rendu automagiquement à la place. Ainsi, l'appel Html.EditorFor(model => model.mailingAddress) rend la vue partielle à la place.

Je pense que le premier endroit que j'ai lu à ce sujet était quand je cherchais une validation DateTime. Consultez this lien, et peut-être votre vue partielle aura des Html.EditorFor(model => model.line1) « s et Html.EditorFor(model => model.city) » s

Cela ne fait pas tout super-automatique, mais il aide à l'édition future des types de données telles que l'adresse.

Questions connexes