Как указать минимальный, но не максимальный десятичный знак, используя атрибут аннотации данных диапазона?

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

Вот что у меня есть ... Я не уверен, как правильно это сделать.

[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
121 голос | спросил user169867 27 J000000Tuesday10 2010, 19:41:17

10 ответов


0

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

[Range(typeof(decimal), "0", "79228162514264337593543950335")
  ] public decimal Price { get; set; } 
ответил user169867 28 J000000Wednesday10 2010, 16:05:25
0

Как насчет этого:

[Range(0.0, Double.MaxValue)]

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

ответил Jacob 27 J000000Tuesday10 2010, 19:48:55
0

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

    [Range(0, Double.PositiveInfinity)]

По умолчанию будет отображаться сообщение об ошибке:

  

Поле SuchAndSuch должно быть от 0 до бесконечности.

ответил Jordan 10 ThuEurope/Moscow2015-12-10T19:09:58+03:00Europe/Moscow12bEurope/MoscowThu, 10 Dec 2015 19:09:58 +0300 2015, 19:09:58
0

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

[Min(0)]

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

Вам необходимо DataAnnotationsExtensions , чтобы использовать это.

ответил Nicolai Schlenzig 20 PMpFri, 20 Apr 2012 17:12:02 +040012Friday 2012, 17:12:02
0

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

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

[Range(0.0, 1000000000000)]

Или, если вам это действительно нужно, просто вставьте значение Decimal.MaxValue (без запятых): 79,228,162,514,264,337,593,543,950,335

Любой из них будет хорошо работать, если вы не из Зимбабве.

ответил jfar 28 J000000Wednesday10 2010, 02:26:02
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 });
        }
    }
}
ответил Erikas Pliauksta 31 TueEurope/Moscow2013-12-31T16:29:20+04:00Europe/Moscow12bEurope/MoscowTue, 31 Dec 2013 16:29:20 +0400 2013, 16:29:20
0

Я бы поставил decimal.MaxValue.ToString(), поскольку это эффективный потолок для десятичного типа, который эквивалентен отсутствию верхней границы.

ответил Dr Herbie 27 J000000Tuesday10 2010, 19:46:55
0

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

[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.")]
ответил David T. Macknet 25 FebruaryEurope/MoscowbTue, 25 Feb 2014 23:14:30 +0400000000pmTue, 25 Feb 2014 23:14:30 +040014 2014, 23:14:30
0

используя Range с

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

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

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

ответил Abi 19 Jam1000000amThu, 19 Jan 2017 09:33:57 +030017 2017, 09:33:57
0

Попробуйте это

[Range(0.0,(double)Decimal.MaxValue]
ответил Abi 19 Jam1000000amThu, 19 Jan 2017 09:33:57 +030017 2017, 09:33:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132