C# 多数据注释不';行不通
我班上有以下代码:C# 多数据注释不';行不通,c#,data-annotations,C#,Data Annotations,我班上有以下代码: [Required( ErrorMessageResourceType = typeof (Resources), ErrorMessageResourceName = "VALIDATION_ERROR_ISO" )] [StringLength(3, ErrorMessageResourceType = typeof (Resources), ErrorMessageResourceName = "VALIDATION_ERROR_
[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)属性
我使用VisualStudio2010
先谢谢你
编辑:
我发现了我的错误:
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");
}
}
创建一个示例MVC应用程序并用一个文本框绑定ISO,我的代码就可以工作了。我已经在我的环境中进行了测试。若我将Required放在StringLength之前,那个么StringLength验证不会启动,但相反的验证正在工作。