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

时间:2010-07-27 15:41:17

标签: c# .net asp.net-mvc data-annotations

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

这是我到目前为止所做的......我不确定这样做的正确方法是什么。

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

10 个答案:

答案 0 :(得分:188)

这样的事情怎么样:

[Range(0.0, Double.MaxValue)]

那应该做你想要的,你可以避免使用字符串。

答案 1 :(得分:70)

如果您担心字符串看起来不错,可以这样做:

    [Range(0, Double.PositiveInfinity)]

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

  

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

答案 2 :(得分:34)

似乎别无选择,只能手动输入最大值。我希望有一些类型的重载,你不需要指定一个。

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

答案 3 :(得分:31)

您可以使用:

[Min(0)]

这将强制要求的最小值为0(零),并且没有最大值。

您需要DataAnnotationsExtensions才能使用此功能。

答案 4 :(得分:19)

如果您正在处理价格问题,我相信您可以放心地假设任何费用都不会超过1万亿美元。

我会用:

[Range(0.0, 1000000000000)]

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

如果你不是来自津巴布韦,其中任何一个都会运作良好。

答案 5 :(得分:10)

您可以使用自定义验证:

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

答案 6 :(得分:1)

我会放decimal.MaxValue.ToString(),因为这是十进制类型的有效上限,相当于没有上限。

答案 7 :(得分:1)

我打算尝试这样的事情:

[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.")]

答案 8 :(得分:1)

[Range(0.01,100000000,ErrorMessage =“价格必须大于零!”)]

答案 9 :(得分:0)

使用Range with

List mSelectedItems = new ArrayList();

@Override
public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) {
if (isChecked) {
                   // If the user checked the item, add it to the selected items
                   mSelectedItems.add(indexSelected);
               } else if (mSelectedItems.contains(indexSelected)) {
                   // Else, if the item is already in the array, remove it
                   mSelectedItems.remove(Integer.valueOf(indexSelected));
               }

}

希望它会有所帮助