TryValidateObject始终返回true

时间:2014-07-29 14:14:31

标签: .net vb.net validation data-annotations

我有这段代码:

Dim context = New System.ComponentModel.DataAnnotations.ValidationContext(p, Nothing, Nothing)
Dim results = New List(Of System.ComponentModel.DataAnnotations.ValidationResult)
Dim isValid = System.ComponentModel.DataAnnotations.Validator.TryValidateObject(p, context, results)

p是我尝试验证的对象。它有一个属性:

<Range(Double.Epsilon, Double.MaxValue, ErrorMessage:="Provide a positive amount value.")>
Public Property Amount As Decimal Implements ICrmOpportunityProductData.Amount

虽然我在验证时Amount为0(因此无效,因为0小于epsilon),isValid为true且结果列表中没有错误。为什么呢?

修改

为避免转换问题,我将范围属性更改为1:

验证
<Range(1.0, Double.MaxValue, ErrorMessage:="Provide a positive amount value.")>
Public Property Amount As Decimal Implements ICrmOpportunityProductData.Amount

仍然验证不会返回Amount = 0的任何错误。

1 个答案:

答案 0 :(得分:0)

msdn文档对于实际比较对象的方式似乎很模糊。 但其中一个页面 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.rangeattribute.operandtype%28v=vs.110%29.aspx 对象必须实现IComparable

的状态

大多数谎言obj.CompareTo被调用而AFAIK(不是静态方法)Decimal.CompareTo方法抛出和ArgumentException如果传递任何不是十进制的

Double.Epsilon转换为十进制为0