2010-12-02 3 views
3

Ma question estOù placer des annotations de validation Objet ViewModel ou Domaine?

Comme je passe UserCreateViewModel de mon Créer contrôleur qui signifie que ma validation (ModelState.IsValid) ne fonctionne que sur UserCreateViewModel si Annotation sont définis là-dessus. Mais je ne peux pas définir DataAnnotation sur chacun de mes ViewModels car ce sera beaucoup de travail. Au lieu de cela, je veux le mettre sur le modèle de domaine de l'utilisateur. Alors, comment puis-je réparer la méthode Create pour corriger mon travail d'annotation et mapper aussi sans ajouter plus de code au contrôleur.

// Mon contrôleur Créer méthode

[HttpPost] 
public ActionResult Create(UserCreateViewModel user) 
{ 
    if (ModelState.IsValid) 
    { 
     var createUser = new User(); 
     Mapper.Map(user, createUser); 

     _repository.Add(createUser); 

     return RedirectToAction("Details", new { id = createUser.UserId }); 
    } 

    return View("Edit", user); 
} 

// UserCreateViewModel -> Créer un modèle de vue spécifique

public class UserCreateViewModel 
{ 
    public string UserName { get; set; } 
    public string Password { get; set; } 
} 

// utilisateur -> Objet de domaine

[MetadataType(typeof(User.UserValidation))] 
public partial class User 
{ 
    private class UserValidation 
    { 
     [Required(ErrorMessage = "UserName is required.")] 
     [StringLength(50, MinimumLength = 2, ErrorMessage = "{0} is between {1} to {2}")] 
     [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed")] 
     public string UserName { get; set; } 

     [Required(ErrorMessage = "Password is required.")] 
     [StringLength(50, MinimumLength = 2, ErrorMessage = "{0} is between {1} to {2}")] 
     public string Password { get; set; } 
    } 
} 

Répondre

1

validation doit être mettre au moins sur le modèle de vue parce que c'est ce que vous recevez en tant qu'entrée de l'utilisateur. En ce qui concerne la validation sur le modèle, vous pouvez également l'ajouter, mais tant que vous passez un modèle de vue à votre action POST (ce que vous devez faire exactement), la validation sur le modèle sera ignorée. Bien sûr, ce n'est pas un problème ici parce qu'un modèle est quelque chose qui peut être réutilisé sur d'autres applications qui n'utilisent pas de modèles de vue et ainsi votre modèle est garanti pour être valide. En ce qui concerne ASP.NET MVC, cette étape n'est pas nécessaire.

Questions connexes