带枚举的 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,则仅验证必需的属性。