0

ASP.NET MVC 응용 프로그램에서 사용자 정의 주석을 사용하여 클라이언트 측 유효성 검사를 수행하려고합니다. 다소 긴 게시물에 대해 유감스럽게 생각합니다.클라이언트 측 사용자 정의 주석 유효성 검사가 작동하지 않습니다.

<input data-val="true" data-val-customstringlength="Max length 25" data-val-customstringlength-max="25" data-val-customstringlength-min="0" id="BillAddress1" name="BillAddress1" type="text" value=""> 
:

[CustomStringLength(25)] 
public virtual string BillAddress1 { get; set; } 

데이터 - 속성들이 정상적으로 생성 된 것으로 나타났습니다 : 내보기 모델의 속성을 사용

public class CustomStringLengthAttribute : ValidationAttribute, IClientValidatable 
{ 
    public int MaxLength { get; private set; } 
    public int MinLength { get; set; } 

    public CustomStringLengthAttribute(int maxLength) 
     : base(GetDefaultErrorMessage) 
    { 
     MaxLength = maxLength; 
    } 

    private static string GetDefaultErrorMessage() 
    { 
     return "Max length {1}"; 
    } 

    public override string FormatErrorMessage(string name) 
    { 
     return string.Format(ErrorMessageString, name, MaxLength, MinLength); 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     ... 

     if (length > MaxLength || length < MinLength) 
      return new ValidationResult(FormatErrorMessage(validationContext.DisplayName)); 

     return ValidationResult.Success; 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     var rule = new ModelClientValidationRule(); 
     rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()); 
     rule.ValidationType = "customstringlength"; 
     rule.ValidationParameters.Add("max", MaxLength); 
     rule.ValidationParameters.Add("min", MinLength); 

     yield return rule; 
    } 
} 

: 여기

는 사용자 지정 특성입니다

클라이언트 측 유효성 검사가 시작되지만 'Uncaught TypeError : j의'정의되지 않은 '호출'속성을 읽을 수 없음 '이 표시됩니다. 이것은 "확인 : 기능 (요소) ..."내지

query.validate.js jquery.validate.js의하면 - 방법 변수는 "미등록"이다

jquery.validate.js, check: function(element) ...

가 찾고 메소드 변수가 정의되지 않은 이유 규칙 변수 설명 - 어떤 이유로 최소 및 최대 매개 변수를 포함하는 배열 대신 "customstringlength"라는 존재의 "정의"입니다 :

jquery.validate.js, check: function(element) ...

왜 그것은 "정의되지 않았"습니까 ??

function validateForm(form) { 
    prepareValidationScripts(form); 
    var validator = $.data(form[0], 'validator'); 
    return validator.form(); 
} 

function prepareValidationScripts(form) { 
    if (form.executed) 
     return; 
    form.removeData("validator"); 
    $.validator.unobtrusive.parse(document); 
    form.executed = true; 
} 

나는이 쳐다보고되었다 : 나는 양식에 대한 유효성 검사를 호출 할 경우

다음
(function ($) { 
    if ($.validator && $.validator.unobtrusive) { 

     $.validator.unobtrusive.adapters.addMinMax("customstringlength", "min", "max"); 

     $.validator.addMethod("customstringlength", function (value, element, min, max) { 
      if (value) { 
       if (value.length < min || value.length > max) { 
        return false; 
       } 
      } 
      return true; 
     }); 
    } 
}(jQuery)); 

은 다음과 같습니다

내가 어댑터를 추가 내 customValidation.js, 등입니다 너무 오래 - 내가 뭘 놓치고 있니?

+1

오류 메시지의 그림 또는 그림을 절대로 게시하지 마십시오. 이 콘텐츠를 검색 할 수 있도록 실제 코드 나 오류 만 게시하십시오. – Sparky

답변

1

나는 결국이 작업을했습니다! 나는 "편리한"addMinMax 어댑터를 사용하지 않고 사용자 정의 어댑터를 작성하기로 결정했습니다. 다음은 업데이트 된 customValidation.js입니다 (다른 모든 것은 동일하게 유지됩니다).

(function ($) { 
    if ($.validator && $.validator.unobtrusive) { 

     $.validator.unobtrusive.adapters.add('customstringlength', ['min', 'max'], function(options) { 
      options.rules['customstringlength'] = { 
       min: options.params.min, 
       max: options.params.max, 
      }; 
      options.messages['customstringlength'] = options.message; 
     }); 

     $.validator.addMethod('customstringlength', function (value, element, params) { 
      if (value) { 
       if (value.length < params.min || value.length > params.max) { 
        return false; 
       } 
      } 
      return true; 
     }); 
    } 
}(jQuery));