我用:
装饰了一个班级[Required(ErrorMessage = "Price is required.")]
public decimal Price { get; set; }
但是用代码验证它时:
for each (PropertyInfo prop in Me.GetType().GetProperties())
{
if (prop.GetIndexParameters().Length = 0)
{
for each (ValidationAttribute validatt in prop.GetCustomAttributes(GetType(ValidationAttribute), True))
{
if (!validatt.IsValid(prop.GetValue(Me, Nothing))
{
retval.Add(New PropertyValidationError(prop.Name, string.Format("There is a problem with the {0} property. It is flagged with the {1}", prop.Name, validatt.GetType.Name), validatt.ErrorMessage));
}
}
}
}
我发现0
的值被视为满足“必要性”,这不是我想要的(事实上,我想允许除 >零) - 是我的验证代码做错了什么,或者是否有一种方法可以使用ValidationAttribute
装饰,这对于值类型的默认值会失败?
答案 0 :(得分:4)
当您使用值类型(例如decimal
)时,无法拥有值。因此,该属性实际上毫无意义。
使用[Range]
会更好,因为这可以指定有意义的值。但是,这不允许您处理“任何非零值”(尽管您可以轻松处理任何正的非零值)。
如上所述,您的标准需要创建custom validation attribute才能验证,因为“除默认值(T)以外的任何值都不是内置验证。”
答案 1 :(得分:1)
使用范围验证属性。
[Range(min, max, ErrorMessage )]
答案 2 :(得分:0)
如何使您的值类型变量可为空?
public decimal? Price { get; set; }