[asp.net-mvc-3] asp.net mvc의 최소 / 최대 값 유효성 검사기

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 속성은 매우 유사합니다.


답변