在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属性将非常相似。