如何使用范围数据注释属性指定最小但不是最大小数?

我想指定一个价格的小数位数必须大于等于0,但我并不想强加一个最大值。

这是我到目前为止…我不知道什么是正确的方法来做到这一点。

[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; } 

怎么样这样的事情:

 [Range(0.0, Double.MaxValue)] 

这应该做你正在寻找的,你可以避免使用string。

如果你关心string看起来不错,你可以这样做:

  [Range(0, Double.PositiveInfinity)] 

这将有一个默认的错误信息:

ThisAndSuch字段必须介于0和Infinity之间。

哦,好像没有select,只能手动input最大值。 我希望有一些types的重载,你不需要指定一个。

 [Range(typeof(decimal), "0", "79228162514264337593543950335") ] public decimal Price { get; set; } 

您可以使用:

 [Min(0)] 

这将强制要求的最小值为0(零),而不是最大值。

你需要DataAnnotationsExtensions来使用它。

如果你的价格工作,我相信你可以安全地认为没有什么会花费超过1万亿美元。

我会使用:

 [Range(0.0, 1000000000000)] 

或者如果您确实需要,只需粘贴Decimal.MaxValue(不含逗号)的值:79,228,162,514,264,337,593,543,950,335

如果你不是来自津巴布韦的话,其中任何一个都能很好地工作。

您可以使用自定义validation:

  [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")] public int IntValue { get; set; } [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")] public decimal DecValue { get; set; } 

validation方法types:

 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 }); } } } 

我会把decimal.MaxValue.ToString()因为这是decmialtypes的有效上限,它相当于没有上限。

我正在尝试这样的事情:

 [Range(typeof(decimal), ((double)0).ToString(), ((double)decimal.MaxValue).ToString(), ErrorMessage = "Amount must be greater than zero.")] 

这样做的问题是,编译器需要一个常量expression式,它禁止((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"] 

希望它会有所帮助