Каков наилучший способ добавления валидатора больше 0 на стороне клиента с использованием MVC и аннотации данных?
Я хотел бы иметь возможность разрешать только отправку формы, если значение в определенном поле больше 0. Я думал, возможно, что атрибут диапазона Mvc позволит мне ввести только одно значение, чтобы обозначить только большее значение тест, но ему не повезло, поскольку он настаивает на минимальных и максимальных значениях.
Любые идеи о том, как это можно достичь?
Ответы
Ответ 1
Вы не можете сохранить число, большее, чем ваш базовый тип данных, который может быть сохранен, так что тот факт, что атрибут Range требует максимального значения, очень хорош. Помните, что ∞
не существует в реальном мире, поэтому следующее должно работать:
[Range(1, int.MaxValue, ErrorMessage = "Please enter a value bigger than {1}")]
public int Value { get; set; }
Ответ 2
Я нашел этот ответ, пытаясь подтвердить любое положительное значение для числа с плавающей запятой /double. Оказывается, эти типы имеют полезную константу для "Эпсилон"
Представляет наименьшее положительное значение System.Double, которое больше нуля.
[Required]
[Range(double.Epsilon, double.MaxValue)]
public double Length { get; set; }
Ответ 3
В настоящее время вы можете (nu) получить Расширения аннотаций данных, который обеспечивает Min и Max, функционируя так же, как вы ожидали бы от них.
Ответ 4
Вы можете создать свой собственный валидатор, например так:
public class RequiredGreaterThanZero : ValidationAttribute
{
/// <summary>
/// Designed for dropdowns to ensure that a selection is valid and not the dummy "SELECT" entry
/// </summary>
/// <param name="value">The integer value of the selection</param>
/// <returns>True if value is greater than zero</returns>
public override bool IsValid(object value)
{
// return true if value is a non-null number > 0, otherwise return false
int i;
return value != null && int.TryParse(value.ToString(), out i) && i > 0;
}
}
Затем включите этот файл в вашу модель и используйте его как атрибут:
[RequiredGreaterThanZero]
[DisplayName("Driver")]
public int DriverID { get; set; }
Я обычно использую это при проверке выпадающего списка.