我想指定一个价格的十进制字段必须是>= 0,但我真的不想强加一个最大值。

这是我目前所做的…我不知道正确的做法是什么。

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

当前回答

如果你担心字符串看起来好看,你可以这样做:

    [Range(0, Double.PositiveInfinity)]

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

字段SuchAndSuch必须在0到无穷大之间。

其他回答

如果你考虑的是价格,我敢肯定你可以放心地认为没有什么会超过1万亿美元。

我使用:

[Range(0.0, 1000000000000)]

或者如果你真的需要它,只需粘贴Decimal的值。MaxValue(不带逗号):79,228,162,514,264,337,593,543,950,335

如果你不是津巴布韦人,这两种方法都适用。

这样怎么样:

[Range(0.0, Double.MaxValue, ErrorMessage = "The field {0} must be greater than {1}.")]

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

[范围(0.01,100000000,ErrorMessage = "价格必须大于零!")]

如果你担心字符串看起来好看,你可以这样做:

    [Range(0, Double.PositiveInfinity)]

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

字段SuchAndSuch必须在0到无穷大之间。

您可以使用自定义验证:

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