2

ASP.NET에서 RequiredFieldValidator은 여전히 ​​클라이언트 측에서 텍스트 상자 컨트롤을 사용하지 않도록 설정하더라도 유효성을 검사합니다. CustomValidator을 사용하여이 동작을 제거하고 싶습니다. 유효성 검사 기능에서 나는 텍스트 상자가 활성화되어 있는지 확인합니다. 그런 경우 유효성 검사기를 유효하게 설정했습니다.클라이언트 측에서 텍스트 상자가 여전히 서버 쪽에서 사용되도록 설정되어 있습니다.

function ValidateTextBox(sender, args) { 

    var $textbox = $('#txtFoo') 
    args.isValid = $textbox.prop('disabled') || $textbox.val(); 

} 

클라이언트 측에서 정상적으로 작동합니다. 문제는 자바 스크립트를 사용하여 클라이언트 쪽에서 텍스트 상자의 상태를 변경했다는 것입니다. 따라서 서버는 변경된 상태에 대해 알지 못합니다 (이제 텍스트 상자 컨트롤이 비활성화 됨). 따라서 예를 들어 Page.Validate을 호출하여 ServerValidate 사용자 정의 유효성 검사기 이벤트가 발생하면 텍스트 상자의 사용 여부를 확인할 수 없습니다. 서버가 이것을 알지 못하기 때문에 Enabled 속성은 항상 true로 설정됩니다. 클라이언트 쪽에서 무엇을 하든지 관계 없습니다.
컨트롤이 비활성화되었을 때 컨트롤 유효성을 사용하지 않도록 설정하거나 서버에 Postback 동안 텍스트 상자의 상태를 알려주려면 어떻게해야합니까?

감사합니다. 대신 'disabled'을 만드는

+0

서버가 다른 컨트롤의 상태에서 말할 수를 사용하여 텍스트 상자 (또는 나머지를 비활성화하는시 RequiredFieldValidator에게 페이지의 텍스트 상자가 클라이언트 측에서 비활성화되었는지 여부 어쨌든 모든 클라이언트 측 스크립트 및 양식 값은 공통 디버깅 도구를 통해 변경할 수 있기 때문에 유효성을 검사하는 가장 안전한 방법은 현재 클라이언트 측에있는 논리를 복제하는 것입니다. –

+0

분명히 이것은 효과가 있습니다. 사용자 정의 컨트롤을 사용하여 라벨 입력 필드와 유효성 검사기를 하나의 컨트롤에 결합했습니다. 컨트롤이 사용 된 페이지의 코드에 의존하지 않고 자동으로 컨트롤을 처리 할 수 ​​있다면 좋을 것입니다. ASP.NET 유효성 검사 컨트롤의 장점이 있다는 것을 의미합니다. 각 컨트롤의 상태를 수동으로 확인할 필요가 없습니다. Page.Validate를 호출하면 모든 것이 좋습니다. – chrinetr

+0

자바 스크립트로 텍스트 상자의 값을 변경하면 서버는 그 값을 서버에 다시 게시 할 것이기 때문에이를 알고 있습니다. 이 메커니즘을 사용하여 텍스트 상자의 비활성 상태를 값과 함께 추가로 보낼 수 있습니까? – chrinetr

답변

0
  1. 'ReadOnly' 모드로 텍스트 상자를 설정하려고합니다.

  2. 할 수 있습니다 Enable 또는 Disable 당신이 ValidatorEnable 자바 스크립트 방법 (reference)