価格の小数フィールドは0以上でなければならないことを指定したいのですが、実際には最大値を課したくありません。
ここに私がこれまでに持っているものがあります...これを行う正しい方法が何なのか分かりません。
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
最大値を手動で入力する以外に選択肢はないようです。私はあなたがそれを指定する必要のないある種のオーバーロードがあることを望んでいました。
[Range(typeof(decimal), "0", "79228162514264337593543950335")]
public decimal Price { get; set; }
このようなものはどうですか:
[Range(0.0, Double.MaxValue)]
それはあなたが探していることをするはずであり、文字列の使用を避けることができます。
あなたがニースに見える文字列について心配している場合、これを行うことができます:
[Range(0, Double.PositiveInfinity)]
これにはデフォルトのエラーメッセージがあります:
SuchAndSuchフィールドは、0からInfinityの間でなければなりません。
価格を扱っているのであれば、1兆ドル以上の費用は一切かかりません。
私は使用します:
[Range(0.0, 1000000000000)]
または、本当に必要な場合は、Decimal.MaxValue
の値をカンマなしで貼り付けてください:79,228,162,514,264,337,593,543,950,335
ジンバブエ出身でない場合、これらのいずれかがうまく機能します。
カスタム検証を使用できます。
[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()
を許可しない定数式を必要とすることです。コンパイラwill take
[Range(0d, (double)decimal.MaxValue, ErrorMessage = "Amount must be greater than zero.")]
範囲の使用
[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]
[Range(typeof(Decimal),"0.0", "1000000000000000000"]
それが役立つことを願っています
[Range(0.01,100000000、ErrorMessage = "価格はゼロより大きくなければなりません!")]
これはdecimal.MaxValue.ToString()
を使用します。これは、これが10進数型の有効な上限であるため、上限がないことと同等です。