Answers:
这样的事情怎么样:
[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(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.")]
[Range(0.01,100000000,ErrorMessage =“价格必须大于零!”]]
我要说的decimal.MaxValue.ToString()
是,这是decmial类型的有效上限,它等效于没有上限。