121


7

範囲データ注釈属性を使用して最小小数を指定し、最大小数を指定しない方法は?

価格の小数フィールドは0以上でなければならないことを指定したいのですが、実際には最大値を課したくありません。

ここに私がこれまでに持っているものがあります…​これを行う正しい方法が何なのか分かりません。

[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }

9 Answer


185


このようなものはどうですか。

[Range(0.0, Double.MaxValue)]

それはあなたが探していることをするはずであり、文字列の使用を避けることができます。


69


見栄えの良い文字列が気になる場合は、次のようにします。

    [Range(0, Double.PositiveInfinity)]

これには、次のデフォルトのエラーメッセージが表示されます。

_ SuchAndSuchフィールドは0からInfinityの間でなければなりません。 _


33


まあ、手動で最大値を入力する以外に選択肢はないようです。 私はあなたがそれを指定する必要のないある種のオーバーロードがあることを望んでいました。

[Range(typeof(decimal), "0", "79228162514264337593543950335")
  ] public decimal Price { get; set; }


30


あなたが使用することができます:

[Min(0)]

これにより、必要な最小値0(ゼロ)が課され、最大値は課されません。

これを使用するには、http://www.nuget.org/packages/DataAnnotationsExtensions [DataAnnotationsExtensions]が必要です。


19


価格を操作する場合、1兆ドルを超える費用は一切かかりません。

私は使用します:

[Range(0.0, 1000000000000)]

または、本当に必要な場合は、Decimal.MaxValue(カンマなし)の値を貼り付けてください:79,228,162,514,264,337,593,543,950,335

ジンバブエ出身でない場合、これらのいずれかがうまく機能します。


10


カスタム検証を使用できます。

    [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
    public int IntValue { get; set; }

    [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
    public decimal DecValue { get; set; }

検証方法のタイプ:

public class ValidationMethods
{
    public static ValidationResult ValidateGreaterOrEqualToZero(decimal value, ValidationContext context)
    {
        bool isValid = true;

        if (value < decimal.Zero)
        {
            isValid = false;
        }

        if (isValid)
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult(
                string.Format("The field {0} must be greater than or equal to 0.", context.MemberName),
                new List() { context.MemberName });
        }
    }
}


1


これは、decimal.MaxValue.ToString()を配置します。これは、これが10進型の有効な上限であるため、上限がないことと同等です。


1


私はこのようなことを試すつもりでした:

[Range(typeof(decimal), ((double)0).ToString(), ((double)decimal.MaxValue).ToString(), ErrorMessage = "Amount must be greater than or equal to zero.")]

ただし、これを行う際の問題は、コンパイラが定数式を必要としているため、 `((double)0).ToString()`が許可されないことです。 コンパイラ_will_ take

[Range(0d, (double)decimal.MaxValue, ErrorMessage = "Amount must be greater than zero.")]


0


範囲の使用

[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]

[Range(typeof(Decimal),"0.0", "1000000000000000000"]

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