programing

매개 변수가있는 ASP.NET MVC 3 클라이언트 쪽 유효성 검사

procenter 2021. 1. 15. 19:46
반응형

매개 변수가있는 ASP.NET MVC 3 클라이언트 쪽 유효성 검사


이 게시물에 이어 사용자 지정 속성에 대한 클라이언트 측 유효성 검사 수행

클라이언트 측 스크립트에 추가 매개 변수를 전달하여이 작업을 수행하는 방법에 대해 알아 보려고합니다.

지금까지 MVC 3으로 사용자 지정 유효성 검사를 구현하려면 다음이 필요합니다.

사용자 지정 유효성 검사 속성 만들기

ValidationAttribute 및 IClientValidatable 구현을 기반으로합니다. 또한 ValidationAttribute 및 IClientValidatable의 기능을 모두 구현하는 것으로 보이는 ModelValidator에서 파생 된 몇 가지 예제를 보았습니다. 그래서 이것이 차이점이 무엇인지 또는 ModelValidator가 MVC 2에서 사용되었는지 여부에 대한 첫 번째 혼란의 지점입니다.

ModelClientValidationRule의 인스턴스는 오류 메시지, ValidationType (클라이언트 측 유효성 검사를 수행 할 자바 스크립트 함수의 이름으로 이해 됨) 및 속성에 추가 된 사용자 지정 매개 변수와 같은 세부 정보를 지정하기 위해 GetClientValidationRules ()에서 반환되어야합니다. 있을 수 있으며 Javascript 유효성 검사에 전달되어야합니다.

런타임 (어떤 부분인지 확실하지 않음)이 다음 ModelClientValidationRule과 같이 태그 요소에 html 속성을 생성 하는 사용한다고 가정 합니다.

data-val="true"  (to indicate that the element requires validation)
data-val-[ValidationType]=[ErrorMessage]
data-val-[ValidationType].[ValidationParameters(n).Key]=[ValidationParameters(n).Value]

클라이언트 측 유효성 검사 논리 구현

자바 스크립트 함수를 생성하고 jQuery.validators.addmethod ()를 사용하여 jQuery.validators에 추가해야 JQuery가 실행해야 할 때이를 인식 할 수 있습니다. 다음과 같은 것 :

jQuery.validator.addMethod(
    'greaterThan', 
    function (value, element, params) {
        /.../
       return /* true or false   */ ; 
    },
    ''
); 

여기에서 내 질문은 '함수 (값, 요소, 매개 변수)'서명이 유효성 검사를 처리 할 메서드의 표준인지 여부이며 양식이 제출되기 전이나 양식이 제출 될 때와 같은 적절한 시간에 일부 jQuery 기능에 의해 호출 될 것이라고 가정합니다. 요소는 fuces 또는 keyUp 이벤트를 잃습니다. 나는 당신이 이것을 제어 할 수있는 방법을 이해하지 않는다. 즉, 어떤 이벤트가 사용자 정의 검증에 적합한 지 선택한다.

눈에 잘 띄지 않는 어댑터 구현

이것은 눈에 거슬리지 않는 속성을 다음과 같이 변환합니다. 나는 그다지 명확하지 않지만 jQuery 규칙이라고 가정하지만 그 작동 방식에 대해서는 명확하지 않습니다. 같은 것

jQuery.validator.unobtrusive.adapters.add(
    'futuredate', 
    { },
    function (options) {
        options.rules['greaterThan'] = true;
        options.messages['greaterThan'] = options.message;
    }
); 

여기 내 질문은 '기능 (옵션)'에 관한 것입니다. 이것이 '함수 (값, 요소, 매개 변수)'전에 호출 될 함수이며 눈에 거슬리지 않는 태그를 jQuery.Validation에서 이해할 수있는 데이터 구조로 추출하는 역할을합니다. 코드 예제에서 옵션은 태그의 속성 값 (예 : options.message)과 매핑해야하는 jQuery 관련 속성 (예 : options.messages [ 'ClientSideValidationFunctionName'])을 모두 포함하는 객체 인 것 같습니다. . 그렇다면 맞춤 매개 변수를 검색하고 매핑하는 방법입니다.

추가 혼란을 추가하지 않았기를 바랍니다.


ValidationParameters속성을 사용 하여 규칙에 사용자 지정 매개 변수를 추가 할 수 있습니다 .

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
    var rule = new ModelClientValidationRule
    {
        ErrorMessage = this.ErrorMessage,
        ValidationType = "futuredate",
    };
    rule.ValidationParameters.Add("param1", "value1");
    rule.ValidationParameters.Add("param2", "value2");
    yield return rule;
}

어댑터에서 사용할 수 있습니다.

jQuery.validator.unobtrusive.adapters.add(
    'futuredate', 
    [ 'param1', 'param2' ],
    function (options) {
        var param1 = options.params.param1; // shall equal 'value1'
        var param2 = options.params.param2; // shall equal 'value2'
        // TODO: use those custom parameters to define the client rules
    }
);

최신 정보:

As requested in the comments section here's how you could pass those parameters to the custom validator rule function:

jQuery.validator.unobtrusive.adapters.add(
    'futuredate', 
    [ 'param1', 'param2' ],
    function (options) {
        // simply pass the options.params here
        options.rules['greaterThan'] = options.params;
        options.messages['greaterThan'] = options.message;
    }
);

jQuery.validator.addMethod('greaterThan', function (value, element, params) {
    // params here will equal { param1: 'value1', param2: 'value2' }
    return ...
}, '');

ReferenceURL : https://stackoverflow.com/questions/4784943/asp-net-mvc-3-client-side-validation-with-parameters

반응형