Мин/макс-значение валидаторы в asp.net в MVC
проверка с использованием атрибутов в asp.net mvc действительно хороший. Я использую [Range(min, max)] валидатор это далеко для проверки значений, как например:
[Range(1, 10)]
public int SomeNumber { get; set; }
- Теперь мне нужно проверить минимальное и максимальное состояние отдельно. Я ожидал найти такие атрибуты:
[MinValue(1, "Value must be at least 1")]
[MaxValue(10, "Value can't be more than 10")]
public int SomeNumber { get; set; }
есть ли предопределенные атрибуты для написания этого? Или как мне этого добиться?
4 ответов:
вот как я бы написал валидатор для MaxValue
public class MaxValueAttribute : ValidationAttribute { private readonly int _maxValue; public MaxValueAttribute(int maxValue) { _maxValue = maxValue; } public override bool IsValid(object value) { return (int) value <= _maxValue; } }атрибут MinValue должен быть примерно таким же
Я не думаю, что атрибут min/max validations существует. Я бы использовал что-то вроде
[Range(1, Int32.MaxValue)]для минимального значения 1 и
[Range(Int32.MinValue, 10)]для максимального значения 10
полный пример как это можно сделать. Чтобы избежать необходимости писать сценарии проверки на стороне клиента, используется существующий ValidationType = "range".
public class MinValueAttribute : ValidationAttribute, IClientValidatable { private readonly double _minValue; public MinValueAttribute(double minValue) { _minValue = minValue; ErrorMessage = "Enter a value greater than or equal to " + _minValue; } public MinValueAttribute(int minValue) { _minValue = minValue; ErrorMessage = "Enter a value greater than or equal to " + _minValue; } public override bool IsValid(object value) { return Convert.ToDouble(value) >= _minValue; } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var rule = new ModelClientValidationRule(); rule.ErrorMessage = ErrorMessage; rule.ValidationParameters.Add("min", _minValue); rule.ValidationParameters.Add("max", Double.MaxValue); rule.ValidationType = "range"; yield return rule; } }
плагин проверки jQuery уже реализует правила min и max, нам просто нужно создать адаптер для нашего пользовательского атрибута:
public class MaxAttribute : ValidationAttribute, IClientValidatable { private readonly int maxValue; public MaxAttribute(int maxValue) { this.maxValue = maxValue; } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var rule = new ModelClientValidationRule(); rule.ErrorMessage = ErrorMessageString, maxValue; rule.ValidationType = "max"; rule.ValidationParameters.Add("max", maxValue); yield return rule; } public override bool IsValid(object value) { return (int)value <= maxValue; } }адаптер:
$.validator.unobtrusive.adapters.add( 'max', ['max'], function (options) { options.rules['max'] = parseInt(options.params['max'], 10); options.messages['max'] = options.message; });мин атрибут будет очень похож.
Comments