是否可以将Required ValidationAttribute与值类型一起使用?

时间:2013-06-13 16:23:14

标签: c# data-annotations

我用:

装饰了一个班级
[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装饰,这对于值类型的默认值会失败?

3 个答案:

答案 0 :(得分:4)

当您使用值类型(例如decimal)时,无法拥有值。因此,该属性实际上毫无意义。

使用[Range]会更好,因为这可以指定有意义的值。但是,这不允许您处理“任何非零值”(尽管您可以轻松处理任何正的非零值)。

如上所述,您的标准需要创建custom validation attribute才能验证,因为“除默认值(T)以外的任何值都不是内置验证。”

答案 1 :(得分:1)

使用范围验证属性。

[Range(min, max, ErrorMessage )]

答案 2 :(得分:0)

如何使您的值类型变量可为空?

public decimal? Price { get; set; }