sti*_*k81 99 validation asp.net-mvc-3
使用asp.net mvc中的属性进行验证非常好.[Range(min, max)]到目前为止,我一直在使用验证器来检查值,例如:
[Range(1, 10)]
public int SomeNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是 - 现在我需要分别检查最小和最大条件.我希望找到这样的属性:
[MinValue(1, "Value must be at least 1")]
[MaxValue(10, "Value can't be more than 10")]
public int SomeNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)
是否有任何预定义的属性来写这个?或者我如何实现这一目标?
Guy*_*Guy 183
我认为不存在min/max验证属性.我会用类似的东西
[Range(1, Int32.MaxValue)]
Run Code Online (Sandbox Code Playgroud)
最小值1和
[Range(Int32.MinValue, 10)]
Run Code Online (Sandbox Code Playgroud)
最大价值10
Cha*_*let 45
以下是我为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;
}
}
Run Code Online (Sandbox Code Playgroud)
MinValue属性应该完全相同
小智 38
如何做到这一点的完整示例.为避免编写客户端验证脚本,已使用现有的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;
}
}
Run Code Online (Sandbox Code Playgroud)