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

在 asp.net mvc 中使用属性进行验证非常好。到目前为止,我一直在使用 [Range(min, max)]验证器来检查值,比如:

[Range(1, 10)]
public int SomeNumber { get; set; }

然而,现在我需要分别检查 min 和 max 条件:

[MinValue(1, "Value must be at least 1")]
[MaxValue(10, "Value can't be more than 10")]
public int SomeNumber { get; set; }

是否有任何预定义的属性来写这个? 或者我如何实现这个?

135103 次浏览

下面是我如何为 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 属性应该完全相同

我认为最小/最大验证属性不存在。 我会用

[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;
});

最小属性将是非常相似的。