클라이언트 확인
페이지에 클라이언트 인증이 활성화 된 경우 왕복 중에 완전히 다른 이벤트가 발생합니다. 클라이언트 인증은 클라이언트 JSCRIPT®를 사용하여 구현됩니다. 이 검증을 구현하려면 이진 구성 요소가 필요하지 않습니다.
JScript 언어는 잘 표준화되어 있지만 브라우저에서 HTML 문서와 상호 작용하는 데 사용되는 문서 개체 모델 (DOM)에 대해 널리 채택 된 표준은 없습니다. 따라서 클라이언트 인증은 Internet Explorer 4.0에서만 수행됩니다. 인증 객체는 Internet Explorer DOM이기 때문입니다.
서버 관점에서 클라이언트 확인은 검증 컨트롤이 다른 컨텐츠를 HTML로 보낸다는 것을 의미합니다. 그 외에는 이벤트 시퀀스가 정확히 동일합니다. 서버 측 확인은 여전히 실행됩니다. 중복되는 것처럼 보일 수 있지만 : 매우 중요합니다.
일부 확인 컨트롤은 클라이언트 스크립트를 지원하지 않을 수 있습니다. 좋은 예가 있습니다. CustomValidator 및 Server Verification Functions를 모두 사용하려는 경우 클라이언트 확인 기능이 없습니다.
안전 예방 조치. 어떤 사람들은 스크립트가있는 페이지를 쉽게 얻은 다음 해당 페이지를 비활성화하거나 변경할 수 있습니다. 잘못된 데이터가 시스템에 들어가는 것을 방지하기 위해 스크립트를 사용하지 말고 사용자로부터 더 빠른 피드백을 얻으려면 스크립트를 사용해야합니다. 따라서 CustomValidator를 사용하려면 해당 서버 확인 기능없이 클라이언트 확인 기능을 제공해서는 안됩니다.
각 확인 제어는 표준 클라이언트 스크립트 블록이 페이지로 전송되도록합니다. 실제로 이것은 스크립트 라이브러리 webUivalidation.js의 코드에 대한 참조를 포함하는 코드의 작은 부분 일뿐입니다. 이 스크립트 라이브러리 파일에는 클라이언트 확인을위한 모든 논리가 포함되어 있으며 파일은 별도로 다운로드해야하며 브라우저의 캐시에 저장할 수 있습니다.
스크립트 라이브러리 정보
확인 웹 제어 스크립트가 스크립트 라이브러리에 있으므로 모든 클라이언트-검증 된 코드를 페이지로 직접 보낼 필요는 없지만 표면에서 그렇게하는 것 같습니다. 기본 스크립트 파일 참조는 다음과 같습니다.
<script language = "javaScript"
src = "/_ aspx/1.0.9999/script/webuivalidation.js"> </script>
기본적으로 스크립트 파일은 "_ASPX"디렉토리의 기본 루트 디렉토리에 설치되며 루트-관련 스크립트 포함 지시문으로 호출되며, 이는 전방 슬래시로 시작합니다. 이 참조는 각 개별 객체에 스크립트 라이브러리를 포함 할 필요가 없으며 동일한 컴퓨터의 모든 페이지가 동일한 파일을 참조 할 수 있음을 나타냅니다. 이 경로에는 공통 언어 런타임 버전 번호가있어 동일한 컴퓨터에서 다른 런타임 버전이 실행될 수 있습니다.
기본 가상 루트 디렉토리를 보면 파일을 찾아 내용을 봅니다. 이 파일의 위치는 config.web 파일에 지정되어 있습니다. config.web 파일은 대부분의 ASP+ 설정에 대한 XML 파일입니다. 다음은 파일의 위치 정의입니다.
<WebControls
clientscripttlocation = "/_ aspx/{0}/script/"
/>
당신은 일어난 일에 대한 통찰력을 얻기 위해 대본을 읽는 것이 좋습니다. 그러나 기능은 특정 런타임 버전에 밀접하게 연결되어 있으므로 이러한 스크립트를 수정하지 않는 것이 좋습니다. 런타임 버전이 업데이트되면이 스크립트는 해당 업데이트가 필요할 수 있으며 변경 사항을 포기하거나 스크립트가 작동하지 않는 문제에 직면하게됩니다. 특정 프로젝트가 이러한 스크립트를 변경 해야하는 경우 먼저 스크립트를 백업 한 다음이 파일의 위치를 비공개 config.web 파일로 바꾸어 프로젝트를 백업 파일로 가리 킵니다. 문자열에 형식 명령 "{0}"이 포함 된 경우 런타임 버전 번호가 명령어를 대체합니다. 해당 위치를 상대적 또는 절대 참조로 변경하는 것이 가장 좋습니다.
클라이언트 인증을 비활성화합니다
때로는 클라이언트 인증을 원하지 않을 수도 있습니다. 입력 필드 수가 작 으면 클라이언트 확인이 거의 사용되지 않을 수 있습니다. 결국, 당신은 매번 한 번 서버를 오가야하는 논리가 있어야합니다. 클라이언트에 동적으로 나타나는 정보가 레이아웃에 부정적인 영향을 미칩니다.
클라이언트 인증을 비활성화하려면 페이지 지침 "ClientTarget = DownLevel"을 사용하십시오. 이 지침은 다음 ASPX 파일의 시작과 유사합니다.
< %@ page language = "c#"clientTarget = downlevel %>
이 지침의 기본값은 "자동"이므로 Microsoft Internet Explorer 4.0 이상에 대한 클라이언트 인증 만 수행합니다.
참고 : 불행히도 베타 1 에서이 지침은 단순히 검증을 비활성화하는 것이 아니라 HTML 3.2 태그를 사용하여 모든 웹 컨트롤을 처리하여 예상치 못한 결과를 생성 할 수 있습니다. 최종 버전은이 문제를 제어하는 더 나은 방법을 제공합니다.
클라이언트 이벤트 시퀀스
이 순서는 클라이언트 유효성 검사를 포함하는 페이지를 실행할 때 발생하는 일련의 이벤트입니다.
페이지가 브라우저에로드되면 각 검증 컨트롤은 시간을 일정 시간으로 초기화해야합니다. 이러한 컨트롤은 <Span> 태그로 전송되며 HTML 속성은 서버의 속성에 가장 가깝습니다. 가장 중요한 것은 유효성이있는 모든 입력 요소가 현재 "장착"됩니다. 참조 된 입력 요소는 입력이 변경 될 때마다 검증 루틴이 호출되도록 클라이언트 이벤트를 수정합니다.
스크립트 라이브러리의 코드는 사용자가 탭 키를 사용하여 필드간에 전환 할 때 실행됩니다. 별도의 필드가 변경되면 검증 조건이 재평가되어 검증자가 필요에 따라 보이지 않게됩니다.
사용자가 양식을 제출하려고하면 모든 유효성 검사기가 다시 평가됩니다. 이러한 모든 유효성 검사기가 유효하면 양식이 서버에 제출됩니다. 하나 이상의 오류가있는 경우 다음 상황이 발생합니다.
제출이 취소되었습니다. 양식은 서버에 제출되지 않습니다.
모든 유효하지 않은 유효성 검사기가 보입니다.
확인 요약에 showSummary = true가 포함 된 경우 확인 제어의 모든 오류가 수집되고 해당 오류로 내용이 업데이트됩니다.
확인 요약에 ShowMessageBox = true가 포함 된 경우 클라이언트 정보 상자에 오류가 수집되어 표시됩니다.
변경 사항이 입력되거나 제출 될 때마다 클라이언트 확인 컨트롤이 실행되므로 이러한 확인 제어는 일반적으로 클라이언트에 대해 두 번 이상 평가됩니다. 제출 후 이러한 확인 제어는 서버에서 여전히 재평가됩니다.
클라이언트 API
클라이언트 컴퓨터에서 사용될 수있는 작은 API가 있습니다. 일부 루틴은 숨길 수 없으므로 이론적으로 클라이언트를 활용하여 스크립트에 정의 된 모든 변수, 기능 및 기능을 확인할 수 있습니다. 그러나 이들 중 다수는 변경 될 수있는 구현 세부 사항입니다. 다음은 사용하도록 권장하는 클라이언트 객체를 요약합니다.
표 3. 클라이언트 객체
이름 유형 설명
page_isvalid boolean 변수는 페이지가 현재 유효한지 여부를 나타냅니다. 확인 스크립트는 항상 변수를 최신 상태로 유지합니다.
page_validators 요소 배열 이것은 페이지의 모든 유효성 검사기를 포함하는 배열입니다.
page_validationActive 부울 변수는 검증을 수행 해야하는지 여부를 나타냅니다. 이 변수를 False로 설정하면 프로그래밍을 통해 꺼질 수 있습니다.
isValid 부울 속성 각 클라이언트 유효성 검사기에는 유효성 검사기가 현재 유효한지 여부를 나타내는이 속성이 있습니다. PDC 버전 에서이 속성은 상류 및 소문자 ( "isvalid")와 혼합되어 있습니다.
클라이언트 인증 우회
종종 수행해야 할 작업 중 하나는 페이지에 취소 버튼 또는 탐색 버튼을 추가하는 것입니다. 이 경우 페이지에 오류가 있더라도 버튼을 사용하여 페이지를 제출할 수 있습니다. 클라이언트 버튼 "OnClick"이벤트는 양식의 "OnSubmit"이벤트 전에 발생하므로 수표를 제출하고 확인을 우회하지 않을 수 있습니다. 다음은 HTML 이미지 컨트롤을 취소 버튼으로 사용하여 작업을 완료하는 방법에 대해 설명합니다.
<입력 유형 = 이미지 runat = 서버
value = "취소"
onserverclick = cmdcancel_click>
버튼 또는 ImageButton 컨트롤을 사용 하여이 작업을 실행하면 "Onclick"이벤트가 동일한 이름의 서버 측 이벤트라고 가정하기 때문에 약간의 혼란이 발생합니다. 클라이언트 스크립트에서 이벤트를 설정해야합니다.
<ASP : ImageButton runat = Server ID = CMDIMGCANCEL
alternatetext = "취소"
onclick = cmdcancel_click/>
<script language = "javaScript">
문서 .ALL [ "CMDIMGCANCEL"]. ONCLICK =
새 함수 ( "page_validationActive = false;");
</script>
이 문제를 해결하는 또 다른 방법은 클라이언트 스크립트에서 커밋 이벤트가 반환 될 때 커밋 이벤트를 트리거하지 않도록 취소 버튼을 설정하는 것입니다. HTMLINPUTBUTTON 및 LINKBUTTON 컨트롤이 이에 대한 예입니다.
특수 효과
또 다른 일반적인 요구 사항은 오류가 발생하면 유효성 검사기 자체가 표시하는 오류 메시지 외에 다른 효과가 필요하다는 것입니다. 이 경우 서버 또는 클라이언트에서 동시에 수정해야합니다. 입력이 유효한지 여부에 따라 색상을 변경하기 위해 레이블을 추가해야한다고 가정하십시오. 서버 에서이 작업을 구현하는 방법은 다음과 같습니다.
공개 클래스 changecolorpage : page {
공개 레이블 LBLZIP;
공개 regularexpressionvalidator valzip;
보호 된 재정의 무효 onload (EventArgs e) {
lblzip.forecolor = valzip.isvalid? black : color.red;
}
}
위의 모든 방법은 완벽하지만 위에서 언급 한 바와 같이 검증을 수정하는 한 클라이언트에서 동일하게하지 않으면 매우 일관성이없는 것처럼 보일 것입니다. 검증 프레임 워크는 이러한 많은 이중 효과를 방해하지만 클라이언트와 서버 모두에서 동시에 달성 해야하는 다른 효과를 피할 수는 없습니다. 다음은 클라이언트에서 동일한 작업을 수행하는 스 니펫입니다.
<ASP : 레이블 ID = lblzip runat = 서버입니다
텍스트 = "우편 번호 :"/>
<asp : textbox id = txtzip runat = 서버입니다
/> </asp : textbox> <br>
<asp : regularexpressionvalidator id = valzip runat = server
ControlTovalIdate = txtzip
errormessage = "유효하지 않은 우편 번호"
ValidationExpression = "[0-9] {5}" /> <br>
<스크립트 언어 = javaScript>
함수 txtziponchange () {
// 클라이언트 인증이 활성화되지 않은 경우 작업이 수행되지 않습니다.
if (typeof (page_validators) == "undefined") 리턴;
// 레이블의 색상을 변경합니다
lblzip.style.color = valzip.isvalid?
}
</script>
베타 1 클라이언트 API
베타 버전 1의 경우 클라이언트 스크립트에서 호출 할 수있는 일부 기능으로 인해 다른 상황이 발생할 수 있습니다.
표 4. 클라이언트 스크립트에서 호출 된 기능
이름 설명
ValidatorValidate (VAL)는 클라이언트 유효성 검사기를 입력으로 간주합니다. 유효성 검사기가 입력을 확인하고 디스플레이를 업데이트하십시오.
ValidatorEnable (val, enable)은 클라이언트 유효성 검사기와 부울 값을 가져옵니다. 클라이언트 유효성 검사기를 활성화 또는 비활성화합니다. 비활성화 된 경우 클라이언트 유효성 검사기를 평가하지 않으며 클라이언트 유효성 검사기는 항상 유효합니다.
ValidatorHookUpControl (Control, Val)은 입력 HTML 요소와 클라이언트 유효성 검사기를 가져옵니다. 유효성 검사기가 변경 될 때 업데이트되도록 해당 요소의 변경 이벤트를 수정하거나 작성하십시오. 이 기능은 여러 입력 값을 기반으로하는 사용자 정의 유효성 검사기에 적합합니다.
특별한 목적은 유효성 검사기를 활성화하거나 비활성화하는 것입니다. 특정 상황에서만 검증이 효과적이 되려면 서버와 클라이언트 모두에서 활성화 상태를 변경해야 할 수도 있습니다. 그렇지 않으면 사용자가 페이지를 제출할 수 없다는 것을 알 수 있습니다.
다음은 위의 예입니다. 확인란이 확인되지 않은 경우에만 검증되는 필드입니다.
공공 수업 조건부 : 페이지 {
공개 htmlinputcheckbox chksameas;
공개 필수 필드 validator rfvalshipaddress;
보호 된 재정의 void validate () {
bool enableShip =! chksameas.Checked;
rfvalshipaddress.enabled = enableShip;
base.validate ();
}
}
클라이언트 동등한 코드는 다음과 같습니다.
<입력 유형 = checkbox runat = 서버 id = chksameas
> 지불 주소와 동일합니다 <br>
<스크립트 언어 = javaScript>
함수 onchangesameas () {
var enableShip =! event.srcelement.status;
validatorenable (rfvalshipaddress, enableShip);
}
</script>