1. 이벤트
오랫동안 무시하거나 발견하지 못한 문제입니다.
페이지에 유효성 검사 컨트롤이 있는 경우 Button 컨트롤이 OnClientClick 이벤트를 트리거하고 이 이벤트가 true 및 false를 반환하면 유효성 검사 컨트롤이 유효하지 않게 되어 더 이상 작동하지 않습니다. 구체적인 설명은 다음과 같습니다.
.Net 페이지는 다음과 같습니다.
2. 이벤트 대응
무슨 일이에요? 먼저 ButtonTest의 OnClientClick 이벤트를 제거한 후 확인 제어가 작동했습니다. 왜 이런가요? 페이지의 소스 코드를 확인한 결과 ButtonTest 컨트롤이 다음 소스 코드를 생성한 것으로 나타났습니다.
이 소스 코드 줄에서 볼 수 있듯이 유효성 검사 컨트롤은 클라이언트 측에서 JavaScript 코드 조각을 생성하여 TextBox의 값이 비어 있는지 확인합니다. ButtonTest의 OnClientClick을 추가한 후 소스 코드를 다시 확인해 보니 ButtonTest 컨트롤에서 생성된 소스 코드는 다음과 같습니다.
이 코드 줄에서 문제가 있는 위치를 명확하게 알 수 있습니다. 클라이언트 측에서는 사용자 정의 자바스크립트가 먼저 실행된 다음 유효성 검사 컨트롤에 의해 생성된 자바스크립트가 실행됩니다. 유효성 검사 제어는 의미를 잃습니다.
3. 대응 통제
문제가 어디에 있는지 알면 해결하기가 더 쉬울 것입니다. 내 해결책은 다음과 같습니다. 사용자 정의 자바스크립트를 실행하기 전에(확인('제출하시겠습니까?' 반환)) 페이지에서 컨트롤을 확인합니까? 규칙을 준수하여 ButtonTest의 OnClientClick 이벤트를 다음과 같이 수정했습니다.
4. 추신
이것은 제가 알고 있던 문제이자 해결책입니다. 이 문제를 발견했을 때 저는 식은땀을 흘렸습니다. 다행히도 엄격한 서버측 검증을 수행했습니다. 그렇지 않으면 비참할 것입니다. 여기에서 엄격한 서버 측 확인을 지정하는 것이 얼마나 필요한지 확인할 수도 있습니다. :-). 이는 "해커"가 클라이언트 확인을 우회하는 것을 방지할 뿐만 아니라 스스로 인지하지 못한 오류로 인해 발생하는 데이터 부정확성을 방지합니다.
참고:
Page_ClientValidate(), 이 함수는 Microsoft 유효성 검사 컨트롤이 포함된 aspx 페이지에서 사용자 입력 작업이 적법한지 여부에 따라 True 또는 False를 반환하는 데 사용됩니다
직접 판단할 수 있습니다.