我想指定一个用于价格的十进制字段必须 >= 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}.")]
这应该可以做到你想要的,并且你可以避免使用字符串。
如果您关心字符串的外观,请按照以下方式操作:
[Range(0, Double.PositiveInfinity)]
这将有一个默认的错误信息:
字段SuchAndSuch必须在0和Infinity之间。
看起来只能手动设置最大值了。我希望有一种不需要指定最大值的重载方式。
[Range(typeof(decimal), "0", "79228162514264337593543950335")]
public decimal Price { get; set; }
[Min(0)]
- 这也有更好的验证信息。我建议更新你的回答。 - Piotr Kula如果你正在处理价格,我相信你可以安全地假设没有任何东西的价值超过1万亿美元。
我会使用:
[Range(0.0, 1000000000000)]
或者,如果你真的需要,只需粘贴Decimal.MaxValue
的值(不带逗号):79228162514264337593543950335
如果你不是来自津巴布韦的人,这两个都可以很好地工作。
[Range(0.0, Decimal.MaxValue)]
? - Paul C您可以使用自定义验证:
[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(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]
[Range(typeof(Decimal),"0.0", "1000000000000000000"]
希望这能有所帮助。
我会使用 decimal.MaxValue.ToString()
,因为这是 decimal 类型的有效上限,相当于没有上限。