価格の小数フィールドが0以上でなければならないことを指定したいのですが、最大値を強制したくありません。
これが私が今まで持っているものです...これを行う正しい方法が何であるかはわかりません。
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
価格の小数フィールドが0以上でなければならないことを指定したいのですが、最大値を強制したくありません。
これが私が今まで持っているものです...これを行う正しい方法が何であるかはわかりません。
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
回答:
このようなものはどうですか:
[Range(0.0, Double.MaxValue, ErrorMessage = "The field {0} must be greater than {1}.")]
それはあなたが探していることをするはずで、文字列の使用を避けることができます。
The field Fixed price discount must be between 0.01 and 1.79769313486232E+308.
文字列の見栄えが気になる場合は、次のようにします。
[Range(0, Double.PositiveInfinity)]
これには、デフォルトのエラーメッセージが表示されます。
フィールドSuchAndSuchは0から無限大の間でなければなりません。
最大値を手動で入力する以外に選択肢がないようです。指定する必要のないタイプのオーバーロードがあるといいのですが。
[Range(typeof(decimal), "0", "79228162514264337593543950335")]
public decimal Price { get; set; }
[Min(0)]
-これには、より良い検証メッセージもあります。私はあなたの答えを更新することをお勧めします
価格で作業している場合は、1兆ドル以上の費用はかかりません。
私は使用します:
[Range(0.0, 1000000000000)]
または、本当に必要な場合は、Decimal.MaxValue
(カンマなしで)の値を貼り付けます。79,228,162,514,264,337,593,543,950,335
ジンバブエ出身でない場合は、どちらを使用しても問題ありません。
[Range(0.0,Decimal.MaxValue)]
ですか?
カスタム検証を使用できます。
[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<string>() { context.MemberName });
}
}
}
私はこのようなものを試してみました:
[Range(typeof(decimal), ((double)0).ToString(), ((double)decimal.MaxValue).ToString(), ErrorMessage = "Amount must be greater than or equal to zero.")]
ただし、これを行う際の問題は、コンパイラが定数式を必要とすること((double)0).ToString()
です。コンパイラはなり取ります
[Range(0d, (double)decimal.MaxValue, ErrorMessage = "Amount must be greater than zero.")]
私はかけることになりdecimal.MaxValue.ToString()
、これは、それは上限がないと同等ですdecmialタイプのための効果的な天井からです。