Как указать min, но не max decimal, используя атрибут аннотации данных диапазона?



Я хотел бы указать, что десятичное поле для цены должно быть >= 0, но я действительно не хочу вводить максимальное значение.



вот что у меня до сих пор...Я не уверен, что правильный способ сделать это.



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

9 ответов:

Как насчет чего-то вроде этого:

[Range(0.0, Double.MaxValue)]

Это должно делать то, что вы ищете, и вы можете избежать использования строк.

Если вы обеспокоены тем, что строка выглядит красиво, вы можете сделать это:

    [Range(0, Double.PositiveInfinity)]

это сообщение об ошибке по умолчанию:

поле SuchAndSuch должно быть между 0 и бесконечностью.

Ну что ж, кажется, нет никакого выбора, кроме как ввести максимальное значение вручную. Я надеялся, что была какая-то перегрузка, где вам не нужно было ее указывать.

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

вы можете использовать:

[Min(0)]

это наложит необходимое минимальное значение 0 (ноль), а не максимальное значение.

вам нужно DataAnnotationsExtensions чтобы использовать это.

Если вы работаете с ценами, я уверен, что вы можете смело предположить, что ничего не будет стоить более 1 триллиона долларов.

Я хотел бы использовать:

[Range(0.0, 1000000000000)]

или если вам это действительно нужно, просто вставьте значение Decimal.Максимальное значение (Без запятых ): 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 });
        }
    }
}

Я бы поставил - это фактический потолок для типа decmial это равносильно не иметь верхней границы.

используя диапазон с

[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]

[Range(typeof(Decimal),"0.0", "1000000000000000000"]

надеюсь, что это поможет

Я собираюсь попробовать что-то вроде этого:

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

Comments

    Ничего не найдено.