多个DataAnnotation不起作用

时间:2015-10-14 06:59:30

标签: c# data-annotations

我的课程中有这个代码:

[Required(
    ErrorMessageResourceType = typeof (Resources),
    ErrorMessageResourceName = "VALIDATION_ERROR_ISO"
    )]
[StringLength(3,
    ErrorMessageResourceType = typeof (Resources),
    ErrorMessageResourceName = "VALIDATION_ERROR_STRING_LENGTH_3"
    )]

public virtual string ISO
{
    get { return iso; }
    set
    {
        iso = value;
        OnPropertyChanged("ISO");
    }
}

和这种验证方法:

public bool IsValid
{
    get
    {
        var validationContext = new ValidationContext(this, null, null);
        return Validator.TryValidateObject(this, validationContext, validationResults);
    }
}

在我的单元测试中:

var testLanguage = new Language(){ISO = "More than 3 characters"};
Assert.IsTrue(!testLanguage.IsValid);

有效。如果ISO属性为null,则由于必需属性,它不是有效的。似乎我的IsValid没有检查Stringlength(3)属性?

我使用Visual Studio 2010

提前谢谢

编辑:

我发现了我的错误:

return Validator.TryValidateObject(this, validationContext, validationResults);

需要true-flag来检查所有属性。现在它适用于:

return Validator.TryValidateObject(this, validationContext, validationResults, true);

1 个答案:

答案 0 :(得分:1)

把它颠倒过来,它会起作用。试试这个

[StringLength(3,
    ErrorMessageResourceType = typeof (Resources),
    ErrorMessageResourceName = "VALIDATION_ERROR_STRING_LENGTH_3"
    )]
[Required(
    ErrorMessageResourceType = typeof (Resources),
    ErrorMessageResourceName = "VALIDATION_ERROR_ISO"
    )]
public virtual string ISO
{
    get { return iso; }
    set
    {
        iso = value;
        OnPropertyChanged("ISO");
    }
}