2009-06-11 8 views
2

J'ai lu plusieurs articles maintenant en ce qui concerne la validation et asp.net mvc et la majorité ont tendance à pointer vers la validation du modèle. Le problème que je vois avec eux est qu'ils ne gèrent pas différents scénarios, ou tout au moins, ils ne montrent pas comment ils seraient atteints par exemplevalidation partielle ASP.NET MVC

Lors de la création ou la mise à jour d'un compte utilisateur de l'adresse e-mail doit correspondre à l'entrée de confirmation par courriel. Cette entrée de confirmation par e-mail ne fait pas partie du modèle, elle sert uniquement à aider l'utilisateur à entrer correctement, ce que l'on pourrait appeler une propriété virtuelle. Lorsqu'un utilisateur se connecte à l'aide de leur adresse e-mail de la validation ne doit pas essayer de faire correspondre l'e-mail contre une entrée de confirmation, cependant, dans tous les exemples que je l'ai vu il n'y a aucun moyen de faire la différence entre les scénarios où est validé les mêmes données dans un autrement.

Quelqu'un peut-il me pointer vers des articles de validation mvc qui gèrent ces types de problème? Ou quelqu'un a-t-il des conseils sur les meilleures pratiques pour gérer la validation comme ça? J'avais pensé à introduire une "action de validation" telle que créer, lire, mettre à jour, supprimer, et ensuite je pourrais valider le même bit de données en fonction du contexte dans lequel il est utilisé. Quelqu'un a-t-il des idées pour faire les choses de cette manière?

Merci à l'avance pour toute aide

Répondre

2

C'est la raison pour laquelle j'utilise validateurs de modèles séparés. Donc, j'ai IValidator et différents validateurs. Pour instancier le validateur, j'utilise DI Container (StructureMap par exemple).

Il a été décrit (pas par moi) ici: Issues with my MVC repository pattern and StructureMap

1

Selon mon expérience

1. validateur doit être découplée de contrôleur dans la couche de service séparée comme, par exemple, a montré dans ce tutoriel: http://www.asp.net/learn/mvc/tutorial-38-cs.aspx

2. Les méthodes de service peuvent encapsuler tout le type de validation. Par exemple:

public bool PlaceBooking(Booking booking) 
    { 
     //Model validation 
     IEnumerable<ErrorInfo> errors = DataAnnotationsValidationRunner.GetErrors(booking); 
     if (errors.Any()) 
      _validationDictionary.AddErrors("error", errors); 

     // Business rule: Can't place bookings on Sundays 
     if(booking.ArrivalDate.DayOfWeek == DayOfWeek.Sunday) 
     _validationDictionary.AddError("ArrivalDate", "Bookings are not permitted on Sundays"); 

     if (!_validationDictionary.IsValid) return false; 

     //Errors comming from Data Access Layer 
     try 
     { 
     return _dao.Save(booking); 
     } 
     catch (DBExecutionException ex) 
     { 
     if (ex.ResultCode == ResultCodes.RES_UNIQUEINDEX) 
      _validationDictionary.AddError("error", "Booking already exists."); 
     else 
      _validationDictionary.AddError("error", "Some other DB issue happens."); 
     } 
     return false; 
    } 
Questions connexes