我的课程中有这个代码:
[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);
答案 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");
}
}