在asp.net mvc中的最小/最大值validation器
在asp.net mvc中使用属性validation是非常好的。 我一直在使用[Range(min, max)]
validation器来检查值,例如:
[Range(1, 10)] public int SomeNumber { get; set; }
但是 – 现在我需要分别检查最小和最大条件。 我期望find像这样的属性:
[MinValue(1, "Value must be at least 1")] [MaxValue(10, "Value can't be more than 10")] public int SomeNumber { get; set; }
是否有任何预定义的属性来写这个? 或者我怎么做到这一点?
以下是我将如何为MaxValue编写validation器
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属性应该是相同的
我不认为最小/最大validation属性存在。 我会用类似的东西
[Range(1, Int32.MaxValue)]
对于最小值1和
[Range(Int32.MinValue, 10)]
最大值10
一个完整的例子,可以做到这一点。 为了避免编写客户端validation脚本,已经使用了现有的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; } }
jQueryvalidation插件已经实现了最小和最大规则,我们只需要为我们的自定义属性创build一个适配器:
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; });
Min属性将非常相似。