带枚举的 RangeAttribute
RangeAttribute with Enum
我有以下枚举:
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; }
但是当我使用验证器时,它通过了:
public bool IsValid(ICollection<ValidationResult> results)
{
bool isValid;
ValidationContext validationContext = new ValidationContext(this);
isValid = Validator.TryValidateObject(this, validationContext, results);
return isValid;
}
使用此方法的其他验证正确地无法使用其他属性(例如 Required)进行验证。
有什么建议吗?
解决方法建议:删除 Undefined
枚举值。改为使用可空枚举类型和空值作为未知值。然后你可以使用所需的验证器。
可能的原因:您的值类型是枚举,但您指定了整数范围。尝试将枚举值指定为 min/max 或使用 RangeAttribute.OperandType
.
试试这个:
isValid = Validator.TryValidateObject(this, validationContext, results, true);
枚举没有问题,你只是错过了最后一个参数 - validateAllProperties
类型:System.Boolean
true 验证所有属性;如果为 false,则仅验证必需的属性。
我有以下枚举:
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; }
但是当我使用验证器时,它通过了:
public bool IsValid(ICollection<ValidationResult> results)
{
bool isValid;
ValidationContext validationContext = new ValidationContext(this);
isValid = Validator.TryValidateObject(this, validationContext, results);
return isValid;
}
使用此方法的其他验证正确地无法使用其他属性(例如 Required)进行验证。
有什么建议吗?
解决方法建议:删除 Undefined
枚举值。改为使用可空枚举类型和空值作为未知值。然后你可以使用所需的验证器。
可能的原因:您的值类型是枚举,但您指定了整数范围。尝试将枚举值指定为 min/max 或使用 RangeAttribute.OperandType
.
试试这个:
isValid = Validator.TryValidateObject(this, validationContext, results, true);
枚举没有问题,你只是错过了最后一个参数 - validateAllProperties 类型:System.Boolean true 验证所有属性;如果为 false,则仅验证必需的属性。