Depuis, j'utilise l'excellent FluentValidation pour valider mes classes de modèles. Dans les applications web, je l'utilise en conjonction avec la bibliothèque jquery.validate pour effectuer la validation côté client également. L'inconvénient est qu'une grande partie de la logique de validation est répétée du côté client et n'est plus centralisée à un seul endroit.
C'est pourquoi je cherche une alternative. Il existe muchos exemples là montrant l'utilisation des annotations de données pour effectuer la validation du modèle. Cela semble très prometteur. Une chose que je n'ai pas trouvée est comment valider une propriété qui dépend de la valeur d'une autre propriété.
Prenons par exemple le modèle suivant :
public class Event
{
[Required]
public DateTime? StartDate { get; set; }
[Required]
public DateTime? EndDate { get; set; }
}
Je voudrais m'assurer que EndDate
est supérieure à StartDate
. Je pourrais écrire un attribut de validation étendant Attribut de validation afin d'exécuter une logique de validation personnalisée. Malheureusement, je n'ai pas trouvé de moyen d'obtenir l'information suivante instance du modèle :
public class CustomValidationAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
// value represents the property value on which this attribute is applied
// but how to obtain the object instance to which this property belongs?
return true;
}
}
J'ai trouvé que le Attribut de validation personnalisé semble faire l'affaire car il a cette ValidationContext
qui contient l'instance de l'objet à valider. Malheureusement, cet attribut n'a été ajouté qu'en .NET 4.0. Ma question est donc la suivante : puis-je réaliser la même fonctionnalité en .NET 3.5 SP1 ?
UPDATE :
Il semble que FluentValidation supporte déjà validation côté client et métadonnées dans ASP.NET MVC 2.
Il serait néanmoins bon de savoir si les annotations de données peuvent être utilisées pour valider les propriétés dépendantes.