繁体   English   中英

多个DataAnnotation不起作用

[英]Multiple DataAnnotation doesn't work

我的课堂上有以下代码:

[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标志来检查所有属性。 现在可以使用:

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

颠倒过来,它将起作用。 尝试这个

[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");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM