Аннотации диапазона между ничего и 100?
У меня есть аннотация [Range], которая выглядит так:
[Range(0, 100)]
public int AvailabilityGoal { get; set; }
Моя веб-страница выглядит следующим образом:
<%=Html.TextBoxFor(u => u.Group.AvailabilityGoal)%>
Он работает так, как должен, я могу вводить только значения от 0 до 100, но я также хочу, чтобы поле ввода было необязательным, пользователь не должен получать ошибку проверки, если поле ввода пуст. Это не имеет ничего общего с диапазоном, но поскольку тип является целым числом. Если пользователь оставляет его пустым, он должен сделать AvailabilityGoal = 0, но я не хочу заставлять пользователя вводить нуль.
Я пробовал это, но он (очевидно) не работал:
[Range(typeof(int?), null, "100")]
Можно ли разрешить это с помощью аннотаций данных или каким-либо другим способом?
Спасибо заранее.
Бобби
Ответы
Ответ 1
Вам не нужно менять атрибут [Range], так как [Range] и другие встроенные в DataAnnotations валидаторы no-op при задании пустого значения. Просто создайте свойство самого типа int?, а не int. Неизменяемые свойства ValueType (например, int) всегда требуются автоматически.
Ответ 2
Я думаю, вы могли бы переопределить объект Range
и добавить это поведение.
public class OptionalRange : RangeAttribute {
public override bool IsValid(object value) {
if (value == null || (int)value == 0) return true;
return base.IsValid(value);
}
}
Ответ 3
Это, кажется, работает (довольно) хорошо:
[Range(Double.NaN, 20)]
public byte? Amount { get; set; }
Нижний предел не проверяется. Не очень удобно, если вы хотите проверить null || >= 0
null || >= 0
. Конечно, проверка на стороне сервера идет рука об руку с проверкой на стороне клиента, где можно проверить это (<0).