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; }
이것을 작성하기 위해 미리 정의 된 속성이 있습니까? 아니면 어떻게해야합니까?
답변
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 Validation Plugin은 이미 최소 및 최대 규칙을 구현하고 있으므로 사용자 정의 속성에 대한 어댑터를 생성하기 만하면됩니다.
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 속성은 매우 유사합니다.