J'ai créé un attribut de validation personnalisé en sous-classant ValidationAttribute. L'attribut est appliqué à mon viewmodel au niveau de la classe car il doit valider plusieurs propriétés.Impossible de définir des noms de membre à partir de l'attribut de validation personnalisé dans MVC2
Je PRÉPONDÉRANTS
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
et retour:
new ValidationResult("Always Fail", new List<string> { "DateOfBirth" });
dans tous les cas où DateOfBirth est l'une des propriétés sur mon modèle de vue. Lorsque je lance mon application, je peux voir que cela se fait toucher. ModelState.IsValid est défini sur false correctement mais lorsque j'inspecte le contenu ModelState, je vois que la propriété DateOfBirth ne contient aucune erreur. Au lieu de cela, j'ai une clé de chaîne vide avec une valeur de null et une exception contenant la chaîne que j'ai spécifiée dans mon attribut de validation.
Cela n'affiche aucun message d'erreur affiché dans mon interface utilisateur lors de l'utilisation de ValidationMessageFor. Si j'utilise ValidationSummary, je peux voir l'erreur. C'est parce qu'il n'est pas associé à une propriété.
Il semblerait que j'ignore le fait que j'ai spécifié le nom du membre dans le résultat de la validation.
Pourquoi est-ce et comment le réparer?
EXEMPLE CODE puisque:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class ExampleValidationAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// note that I will be doing complex validation of multiple properties when complete so this is why it is a class level attribute
return new ValidationResult("Always Fail", new List<string> { "DateOfBirth" });
}
}
[ExampleValidation]
public class ExampleViewModel
{
public string DateOfBirth { get; set; }
}
Merci. Donc l'équipe MVC réutilise la classe ValidationResult mais ignore complètement l'une des propriétés? Dans l'ensemble, je suis extrêmement impressionné par la production de l'équipe MVC, mais c'est plutôt mauvais. Je viens de le vérifier dans MVC3/.NET4 et c'est toujours la même chose. –