0

基本上,我有一个只需要小数条目的文本框,但有一个验证规则只允许在此文本框中使用小数。

这是我拥有的代码,但它没有做我想要的:

#Region " RULE: Decimal Value Required Rule "

    Public Class DecimalRequiredRule
        Inherits Rules.BusinessRule

        Public Sub New(ByVal primaryProperty As Core.IPropertyInfo)
            InputProperties = New List(Of IPropertyInfo)({primaryProperty})
            Me.PrimaryProperty = primaryProperty
        End Sub

        Protected Overrides Sub Execute(ByVal context As Csla.Rules.RuleContext)
            Try
                Dim isDecimal As Decimal = CDec(context.InputPropertyValues(PrimaryProperty))
            Catch ex As Exception
                context.AddErrorResult(PrimaryProperty.FriendlyName & " must be a decimal")
            End Try
        End Sub
    End Class

#End Region
4

1 回答 1

0

假设PrimaryPropertystring数据类型的支持。我做出这个假设是因为如果它是泛型支持的Decimal/Float/Double数据类型,那么该数据类型已经从文本框中绑定的值中“解析”出来了。

作为一个字符串,您可以简单地检查是否存在小数点,这可以通过各种方式完成,例如索引或尝试的<<valueType>>..TryParse方法等,然后context.AddErrorResult(...)在适当的地方进行调用。

如果它实际上由Decimal/Float/Double支持,那么您需要使用简单的数学来检查数字是否具有小数部分的非零值。执行此操作的各种方法是截断数字并比较截断的数字是否与原始值相同,如果不是,则存在分数,甚至将其转换为整数部分足够大的数据类型,并且把它和原来的比较一下。

希望有帮助。

于 2014-12-07T10:07:53.633 回答