je la classe suivante.Net MVC2 Comment ajouter erreur ModelState lors de l'utilisation personnalisée ValidationAttribute
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public sealed class DateValidationAttribute : ValidationAttribute
{
public DateValidationAttribute(string leftDateProperty, CompareOperator compareOperator, string rightDateProperty, string errorMessage)
: base(errorMessage)
{
LeftDateProperty = leftDateProperty;
Operator = compareOperator;
RightDateProperty = rightDateProperty;
}
...
...
}
ValidationAttribute
Il prend deux noms de propriété de date et un opérateur dans le constructeur.
Dans la méthode de validation, le résultat de l'instruction LeftDate Operator RightDate est renvoyé.
public override bool IsValid(object value)
{
DateTime leftDate;
DateTime rightDate;
// Get all properties on the view model
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value);
DateTime rightDate = (DateTime)properties.Find(RightDateProperty, true).GetValue(value);
DateTime leftDate = (DateTime)properties.Find(LeftDateProperty, true).GetValue(value);
// Perform rule check
switch (Operator)
{
case CompareOperator.Equal:
return leftDate.Equals(rightDate);
case CompareOperator.Greater:
return leftDate > rightDate;
case CompareOperator.Lesser:
return leftDate < rightDate;
case CompareOperator.GreaterOrEqual:
return leftDate >= rightDate;
case CompareOperator.LesserOrEqual:
return leftDate <= rightDate;
default:
return false;
}
}
Parce que c'est un attribut AttriuteTargets.Class Je sais qu'il est impossible pour le cadre de savoir quelle propriété qui est à l'origine de la validation à l'échec. Mais je sais que c'est Left Date Property qui échoue et donc je veux définir l'ID de l'erreur dans le modelstate à cette propriété. La raison en est que je veux que le champ défaillant soit marqué dans le formulaire. Comment puis-je modifier l'élément d'erreur ajouté à la collection d'erreurs dans ModelState afin que son ID corresponde à un champ spécifique dans le formulaire?