我想指定一个价格的十进制字段必须是>= 0,但我真的不想强加一个最大值。
这是我目前所做的…我不知道正确的做法是什么。
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
我想指定一个价格的十进制字段必须是>= 0,但我真的不想强加一个最大值。
这是我目前所做的…我不知道正确的做法是什么。
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
当前回答
使用Range
[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(),因为这是十进制类型的有效上限,它相当于没有上限。
这样怎么样:
[Range(0.0, Double.MaxValue, ErrorMessage = "The field {0} must be greater than {1}.")]
这应该做你正在寻找的,你可以避免使用字符串。
如果你考虑的是价格,我敢肯定你可以放心地认为没有什么会超过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(0, Double.PositiveInfinity)]
这将有一个默认的错误消息:
字段SuchAndSuch必须在0到无穷大之间。