Как указать min, но не max decimal, используя атрибут аннотации данных диапазона?
Я хотел бы указать, что десятичное поле для цены должно быть >= 0, но я действительно не хочу вводить максимальное значение.
вот что у меня до сих пор...Я не уверен, что правильный способ сделать это.
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
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 }); } } }
используя диапазон с
[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