How to validate a decimal to be greater than zero using ValidationAttribute
我为整数创建了一个自定义验证器,以检查大于0的输入。它工作正常。
整数的自定义验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | using System; using System.ComponentModel.DataAnnotations; public class GeaterThanInteger : ValidationAttribute { private readonly int _val; public GeaterThanInteger(int val) { _val = val; } public override bool IsValid(object value) { if (value == null) return false; return Convert.ToInt32(value) > _val; } } |
电话代码
1 2 | [GeaterThanInteger(0)] public int AccountNumber { get; set; } |
十进制的自定义验证器
我正在尝试为十进制创建类似的验证器,以检查大于0的输入。但是,这次我遇到了编译器错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class GreaterThanDecimal : ValidationAttribute { private readonly decimal _val; public GreaterThanDecimal(decimal val) { _val = val; } public override bool IsValid(object value) { if (value == null) return false; return Convert.ToDecimal(value) > _val; } } |
电话代码
1 2 | [GreaterThanDecimal(0)] public decimal Amount { get; set; } |
编译器错误(指向[GreaterThanDecimal(0)])
1 | An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type |
我尝试了几种组合,
1 2 | [GreaterThanDecimal(0M)] [GreaterThanDecimal((decimal)0)] |
但是不起作用。
我浏览了
该错误抱怨什么?
在这种情况下,是否还有其他方法可以验证Decimal大于0?
使用范围属性。也适用于小数。
1 | [Range(0.01, 99999999)] |
@JonathonChase在评论中回答了这个问题,我想我会在这里用修改后的代码示例来完成答案,以防有人偶然遇到同样的问题。
抱怨的错误是什么?
因为调用
解决方案
将参数类型更改为double或int
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class GreaterThanDecimalAttribute : ValidationAttribute { private readonly decimal _val; public GreaterThanDecimalAttribute(double val) // <== Changed parameter type from decimal to double { _val = (decimal)val; } public override bool IsValid(object value) { if (value == null) return false; return Convert.ToDecimal(value) > _val; } } |