我有以下枚举:
public enum ApplicationLogTypes
{
Undefined = 0,
Information = 100,
Statistic = 200,
Debug = 300,
Security = 400,
Error = 500
}
我有一个带有RangeAttribute Validation的属性来强制用户没有选择默认选项“Undefined”:
[Range(1, int.MaxValue, ErrorMessage = "Cannot select default option.")]
public ApplicationLogTypes ApplicationLogType { get; set; }
但是当我使用Validator时,它会传递:
public bool IsValid(ICollection<ValidationResult> results)
{
bool isValid;
ValidationContext validationContext = new ValidationContext(this);
isValid = Validator.TryValidateObject(this, validationContext, results);
return isValid;
}
使用此方法进行的其他验证无法使用其他属性(如必需)进行验证。
有什么建议吗?
答案 0 :(得分:2)
变通方法建议:删除Undefined
枚举值。使用可空的枚举类型和空值来代替未知值。然后,您可以使用所需的验证器。
可能的原因:您的值类型是枚举,但您指定了整数范围。尝试将枚举值指定为min / max或使用RangeAttribute.OperandType
。
答案 1 :(得分:2)
试试这个:
isValid = Validator.TryValidateObject(this, validationContext, results, true);
枚举没有问题,你只是错过了最后一个参数 - validateAllProperties 键入:System.Boolean 如果验证所有属性,则为true如果为false,则仅验证所需的属性。