Как указать минимальное, но не максимальное десятичное значение, используя атрибут аннотации данных диапазона?
Я хотел бы указать, что десятичное поле для цены должно быть >= 0, но я действительно не хочу налагать максимальное значение.
Вот что у меня есть до сих пор... Я не уверен, какой правильный способ сделать это.
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
Ответы
Ответ 1
Кажется, нет другого выбора, кроме как ввести максимальное значение вручную. Я надеялся, что был какой-то тип перегрузки, когда вам не нужно было указывать его.
[Range(typeof(decimal), "0", "79228162514264337593543950335")]
public decimal Price { get; set; }
Ответ 2
Как насчет чего-то вроде этого:
[Range(0.0, Double.MaxValue)]
Это должно делать то, что вы ищете, и вы можете избежать использования строк.
Ответ 3
Если вы обеспокоены тем, что строка выглядит красивой, вы можете сделать это:
[Range(0, Double.PositiveInfinity)]
У этого сообщения будет сообщение об ошибке по умолчанию:
Поле SuchAndSuch должно быть от 0 до бесконечности.
Ответ 4
Вы можете использовать:
[Min(0)]
Это наложит минимальное значение 0 (ноль) и максимальное значение.
Вам нужно DataAnnotationsExtensions, чтобы использовать это.
Ответ 5
Если вы работаете с ценами, я уверен, вы можете с уверенностью предположить, что ничего не будет стоить более 1 триллиона долларов.
Я бы использовал:
[Range(0.0, 1000000000000)]
Или, если вам это действительно нужно, просто вставьте значение Decimal.MaxValue
(без запятых): 79,228,162,514,264,337,593,543,950,335
Любой из них будет хорошо работать, если вы не из Зимбабве.
Ответ 6
Вы можете использовать специальную проверку:
[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 });
}
}
}
Ответ 7
Я бы поставил decimal.MaxValue.ToString()
, так как это эффективный потолок для десятичного типа, он эквивалентен отсутствию верхней границы.
Ответ 8
Я собирался попробовать что-то вроде этого:
[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.")]
Ответ 9
с помощью Range с
[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]
[Range(typeof(Decimal),"0.0", "1000000000000000000"]
Надеюсь, что это поможет
Ответ 10
Попробуй это
[Range(0.0,(double)Decimal.MaxValue]
Ответ 11
[Range (0.01,100000000, ErrorMessage = "Цена должна быть больше нуля!")]