验证上下文始终为NULL?

时间:2011-03-23 16:39:12

标签: c# validation asp.net-mvc-3 data-annotations

我有自定义验证属性,例如:

    public class MyCustomAttribute : ValidationAttribute {
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) {
        if ((int)value == 100) {
            // do some checking to validate & return ValidationResult accordingly

        } else return ValidationResult.Success;
    }
}

在这样的用法中:

    [DisplayName("My Custom Property")]
    [MyCustom(ErrorMessage = "ERROR!!!")]
    public int? MyCustomProperty { get; set; }

我的问题是:为什么在MyCustomAttribute内部,在IsValid方法中,validationContext始终为NULL?我需要设置什么特殊的东西才能让它不是NULL?

2 个答案:

答案 0 :(得分:3)

如果您使用

ValidationResult IsValid(object value, ValidationContext validationContext)

检查数据是否有效,你必须使用

v.GetValidationResult(propertyValue,new ValidationContext(this))!= ValidationResult.Success

而不是

 v.IsValid(propertyValue)

答案 1 :(得分:1)

您必须覆盖 RequiresValidationContext


public override bool RequiresValidationContext => true;

它会起作用