temps attribut de validation est cochée que lorsque la validation de la date d'attribut valide true?
Cette déclaration signifie une validation personnalisée. Oui, vous pouvez le faire. Vous pouvez définir un attribut de validation personnalisé qui prend le nom d'un autre champ en tant que paramètre. Ensuite, dans la méthode Validate() surchargée, vous pouvez obtenir PropertyInfo pour cet autre champ par le nom, puis obtenir les attributs de validation et les valider. Après avoir obtenu le résultat, vous pouvez décider de faire une validation sur le premier champ ou non. Brad Wilson avait grand poste sur mvcConf sur la validation
Par ailleurs, vous pouvez également mettre en œuvre IClientValidatable pour conclure la validation côté client
Ceci est l'exemple de code très très et il a besoin d'une manipulation de la vérification d'arguments et d'erreurs, etc. Mais je pense que l'idée est claire
public class OtherFieldDependentCustomValidationAttribute : ValidationAttribute
{
public readonly string _fieldName;
public OtherFieldDependentCustomValidationAttribute(string otherFieldName)
{
_fieldName = otherFieldName;
}
protected override System.ComponentModel.DataAnnotations.ValidationResult IsValid(object value, System.ComponentModel.DataAnnotations.ValidationContext validationContext)
{
//Get PropertyInfo For The Other Field
PropertyInfo otherProperty = validationContext.ObjectType.GetProperty(_fieldName);
//Get ValidationAttribute of that property. the OtherFieldDependentCustomValidationAttribute is sample, it can be replaced by other validation attribute
OtherFieldDependentCustomValidationAttribute attribute = (OtherFieldDependentCustomValidationAttribute)(otherProperty.GetCustomAttributes(typeof(OtherFieldDependentCustomValidationAttribute), false))[0];
if (attribute.IsValid(otherProperty.GetValue(validationContext.ObjectInstance, null), validationContext) == ValidationResult.Success)
{
//Other Field Is valid, do some custom validation on current field
//custom validation....
throw new ValidationException("Other is valid, but this is not");
}
else
{
//Other Field Is Invalid, do not validate current one
return ValidationResult.Success;
}
}
}
Pourquoi voulez-vous faire cela? Si la date et l'heure sont toutes deux invalides, pourquoi ne pas le dire? Ou pourquoi ne pas utiliser la validation côté client pour le faire à la place, qui fera ce que vous voulez? – arame3333