2011-03-31 3 views
0

J'ai un utilisateur:problème avec la conception MVC 3.0

public class User { 
    public int id { get; set; } 
    public string name { get; set; } 
    public string email { get; set; }  
} 

Je créé Voir connexion (fortement typé utilisateur) ... Mais mon avis Login a d'autres attributs, comme la case RememberMe ... Ce l'attribut n'appartient pas au modèle utilisateur ...

Alors, comment est la meilleure façon de gérer cela? Création d'une nouvelle UserViewModel avec tous les attributs de vue est une option, mais je pense que ce ne est pas la meilleure façon ...

Paul

Répondre

2

Alors, comment est la meilleure façon de faire face à cela?

En utilisant un modèle de vue:

public class LoginViewModel 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public bool RememberMe { get; set; } 
} 

frappe fortement une connexion partielle à un modèle utilisateur n'a guère de sens.

+0

Merci, et où ce ViewModel reste? Dans le même projet que Models? – Paul

+1

@Paul, les modèles de vue appartiennent au niveau de l'application MVC car ils sont fortement liés à leur vue correspondante. Le dossier 'Models' semble être un bon endroit pour les mettre. –

+0

Merci Darin ... Ce que vous pensez de ne pas créer ce ViewModel, mais seulement en ajoutant la méthode RememberMe on View, comme: public ActionResult Index (User user, bool RememberMe)? Cela fonctionne très bien, mais je ne connais pas les meilleures pratiques ... – Paul

1

Pour les meilleures pratiques, je vous suggère d'utiliser un ViewModel comme suggéré par Darin. Vous pouvez également créer une fabrique pour copier ViewModel vers Entity. La réflexion est un peu trop ici.

Voici juste l'exemple de Darin Dimitrov en détail.

public class User 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public bool RememberMe { get; set; } 
} 

public class LoginViewModel 
{ 
    [Required] ... and other validation 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public bool RememberMe { get; set; } 
} 

public static class UserFactory 
{ 
    public static User GetUserFromModel(LoginViewModel m, User u) 
    { 
     u.Username = m.Username; 
     u.Password = m.Password; 
     return u; 
    } 
} 

public class UserController : DefaultController 
{ 
    public ActionResult Login(LoginViewModel m) 
    { 
     if (ModelState.IsValid) 
     { 
      User u = UserFactory.GetUserFromModel(m); 
      ....code ... 
     } 
     ... code... 
    } 

} 

@Darin désolé pour votre exemple les détournements, je me souviens d'avoir un peu de mal avec moi-même si je veux juste aider