2010-08-23 2 views
0

J'utilise donc ViewModels pour transmettre des données depuis/vers les formulaires web dans mon application MVC, comme cela me semble être une pratique recommandée d'après ce que j'ai lu.Asp.net MVC récupérant un objet modèle à partir d'un ViewModel

Ma question est quelle est l'approche normale pour ensuite mapper le ViewModel dans une entité de domaine réelle?

Je suppose que je devrais probablement ajouter une méthode 'GetObject à mes ViewModels donc j'ai quelque chose comme:

[AcceptVerbs(HttpVerbs.Post)] 
public void CreatePerson(PersonViewModel model) 
{ 
    Person p = model.GetPerson(); 
    _repository.Save(p); 
} 

Est-ce la bonne approche? Il semble que je me crée beaucoup de travail inutile en utilisant ViewModels de cette façon.

Répondre

1

En supposant que vous lier vos contrôles aux propriétés de l'objet Personne dans la vue comme si

<% Html.TextBoxFor(model => model.Person.Name) %> 

Vous pouvez avoir la méthode suivante pour accepter que le modèle de personne

[AcceptVerbs(HttpVerbs.Post)] 
public void CreatePerson([Bind(Prefix="Person")]Person person) 
{ 
    _repository.Save(person); 
} 
+0

Je Je ne suis pas sûr de comprendre, ou je pense que vous pourriez manquer le point. Je n'expose pas l'objet Person sous-jacent à l'extrémité avant. Toutes les données sont transmises vers/depuis le front-end sous forme de données de chaîne formatées dans un ViewModel (créé à partir de l'entité Person). – fearofawhackplanet

+1

Ahh oui, vous pourriez prendre l'abstraction entre View et Model un peu trop loin. Je préfère l'approche de l'emballage des modèles dans ViewModels et de les lier à la vue. Cela me permet également d'avoir des DataAnnotations appliquées sur le Modèle validées dans la Vue. –