带Enum的RangeAttribute

时间:2015-01-10 20:49:01

标签: c# validation data-annotations

我有以下枚举:

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;
}

使用此方法进行的其他验证无法使用其他属性(如必需)进行验证。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

变通方法建议:删除Undefined枚举值。使用可空的枚举类型和空值来代替未知值。然后,您可以使用所需的验证器。

可能的原因:您的值类型是枚举,但您指定了整数范围。尝试将枚举值指定为min / max或使用RangeAttribute.OperandType

答案 1 :(得分:2)

试试这个:

 isValid = Validator.TryValidateObject(this, validationContext, results, true);

枚举没有问题,你只是错过了最后一个参数 - validateAllProperties     键入:System.Boolean     如果验证所有属性,则为true如果为false,则仅验证所需的属性。