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

がデータ型PrimaryPropertyのバッキングであると仮定します。ジェネリックに裏打ちされたDecimal/Float/Doubleデータ型である場合、データ型はテキスト ボックスにバインドされた値から既に "解析" されているstringため、この仮定を行います。

文字列として、小数点の存在をチェックするだけで済みます。これは、インデックスや試行された<<valueType>>..TryParseメソッドなどのさまざまな方法で実行でき、その結果、適切な場所で呼び出しを行うことができcontext.AddErrorResult(...)ます。

実際にDecimal/Float/Doubleでサポートされている場合は、単純な数学を使用して、数値の小数部分にゼロ以外の値があるかどうかを確認する必要があります。これを行うためのさまざまな方法は、数値を切り捨て、切り捨てられた数値が元の値と同じかどうかを比較することです。それをオリジナルと比較します。

それが役立つことを願っています。

于 2014-12-07T10:07:53.633 に答える