asp.net mvc中的最小/最大值验证器

时间:2011-08-31 12:12:14

标签: asp.net-mvc-3 validation

使用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 个答案:

答案 0 :(得分:166)

我不认为存在min / max验证属性。 我会使用像

这样的东西
[Range(1, Int32.MaxValue)]

最小值1 和

[Range(Int32.MinValue, 10)]

最大值10

答案 1 :(得分:43)

以下是我为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属性应该相同

答案 2 :(得分:37)

如何做到这一点的完整示例。 为避免编写客户端验证脚本,已使用现有的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;
    }

}

答案 3 :(得分:1)

jQuery Validation Plugin已经实现了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;
   });

最小属性非常相似。