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