클라이언트 API
클라이언트에 사용할 수있는 작은 API가 있습니다. 클라이언트 코드에서 다양한 효과를 달성합니다. 일부 루틴은 숨길 수 없으므로 이론적으로 클라이언트를 사용하여 클라이언트가 정의한 모든 변수, 특성 및 기능을 확인할 수 있습니다. 그러나 많은 사람들이 변경 될 수 있습니다. 다음은 사용하도록 권장하는 클라이언트 객체를 요약합니다.
표 3. 클라이언트 객체
이름 유형 설명
page_isvalid boolean 변수 페이지가 현재 유효한 지 여부를 지적했습니다. 스크립트 확인 스크립트는 항상 변수를 최신 상태로 유지합니다.
page_validator 요소 배열 이것은 페이지의 모든 검증을 포함하는 배열입니다.
page_validationActive 부울 변수는 확인 해야하는지 여부를 나타냅니다. 이 변수를 False로 설정하면 프로그래밍을 통해 예정 될 수 있습니다.
IsValid Boolen 속성 각 클라이언트 검증 장치에는 속성이 있는데, 검증 장치가 현재 유효한지 여부를 지적합니다. PDC 버전 에서이 속성은 isvalid와 혼합되어 있습니다.
클라이언트 확인 우회
실행 해야하는 한 가지 작업 중 하나는 페이지에 "취소"버튼 또는 탐색 버튼을 추가하는 것입니다. 이 경우 페이지에 오류가 있더라도 버튼을 사용하여 페이지를 제출할 수도 있습니다. 클라이언트 버튼 ONCLICK 이벤트는 양식의 OnSubmit 이벤트 전에 발생하므로 검사를 제출하고 확인을 우회하지 않을 수 있습니다. 다음은 HTML 이미지 컨트롤을 "취소"버튼으로 사용하여 작업을 완료하는 방법을 보여줍니다.
<입력 유형 = 이미지 runat = 서버
값 = 취소
onclick = page_validationActive = false;
onserverclight = cmdcancel_click>
OnClick 이벤트는 동일한 이름의 서버 -사이드 이벤트라고 가정하기 때문에 버튼 또는 ImageButton 컨트롤을 사용하여 혼란을 실행하십시오. 이 이벤트를 클라이언트 스크립트에서 설정해야합니다.
<ASP : ImageButton runat = Server ID = CMDIMGCANCEL
Alternatetext = 취소
onclick = cmdcancel_click/>
<스크립트 언어 = javaScript>
문서. ALL [CMDIMGCANCEL] .ONCLICK =
새 함수 (page_validationActive = false;);
</스크립트>
이 문제를 해결하는 또 다른 방법은 "취소"버튼의 특정 설정을 설정하여 리턴 할 때 클라이언트 스크립트에서 제출 이벤트를 트리거하지 않도록하는 것입니다. Htmlinputbutton 및 LinkButton 컨트롤이 예입니다.
특수 효과
또 다른 일반적인 요구 사항은 검증 장치 자체에 표시되는 오류 정보 외에도 다른 효과가 필요하다는 것입니다. 이 경우 서버 또는 클라이언트에서 동시에 수행해야합니다. 입력이 유효한지 여부에 따라 색상을 변경하기 위해 레이블을 추가해야한다고 가정하십시오. 다음은 서버 에서이 작업을 구현하는 방법입니다.
공개 클래스 changecolorpage : page {
공개 레이블 LBLZIP;
공개 regulaxpressionvalidator 값;
보호 된 재정의 void Overoad (EventArgs e) {{
lblzip.forecolor = valzip.isvalid? black : color.red;
}
}
위의 모든 방법은 완벽하지만 위의 검증을 수정하는 한 클라이언트에서 동일한 작업을 수행하지 않으면 매우 일관성이없는 것으로 보입니다. 검증 프레임 워크를 사용하면 이러한 많은 이중 효과를 피할 수 있지만 클라이언트와 서버에서 동시에 달성 해야하는 다른 효과를 피할 수는 없습니다. 다음은 클라이언트에서 동일한 작업을 수행하는 조각입니다.
<ASP : 레이블 ID = lblzip runat = 서버입니다
텍스트 = 우편 번호 :/>
<asp : textbox id = txtzip runat = 서버입니다
onchange = txtziponchange ();
<asp : exeralxpressionvalididator id = valzip runat = server
ControlTovalIdate = txtzip
errormessage = 유효하지 않은 우편 번호
validationxpression = [0-9] {5} /> <br>
<스크립트 언어 = javaScript>
함수 txtziponchange () {{) {
// 클라이언트 확인이 활동에 있지 않으면 작업이 수행되지 않습니다.
ifof (page_validators) == 정의되지 않은) 반환;
// 레이블의 색상을 변경합니다
lblzip.style.color = valzip.isvalid?
}
</스크립트>
베타 1 클라이언트 API
베타 1 판의 경우 클라이언트 스크립트에서 호출 할 수있는 일부 기능으로 인해 다른 상황이 발생합니다.
표 4. 클라이언트 스크립트 호출의 기능
이름 설명
ValidatorValidate (VAL)는 클라이언트 검증 장치를 입력으로 사용합니다. 검증 장치가 입력을 확인하고 디스플레이를 업데이트하십시오.
ValidatorEnable (Val, enable) 클라이언트 검증 장치와 부울 값을 얻습니다. 클라이언트 확인 장치를 활성화 또는 비활성화합니다. 비활성화 된 경우 클라이언트 확인 장치는 평가되지 않으며 클라이언트 유효성 검사기는 항상 유효합니다.
ValidatorHookUpControl (Control, Val)은 입력 HTML 요소 및 클라이언트 검증 장치를 얻었습니다. 변경 중에 검증 장치를 업데이트 할 수 있도록 요소의 변경 이벤트를 수정하거나 작성하십시오. 이 기능은 여러 입력 값을 기반으로 사용자 정의 검증에 적합합니다.
특별한 목적은 검증 장치를 활성화하거나 비활성화하는 것입니다. 특정 상황에서만 적용되는지 확인하려면 서버 및 클라이언트에서 동시에 활성화 상태를 변경해야 할 수도 있습니다. 그렇지 않으면 사용자가 페이지를 제출할 수 없다는 것을 알 수 있습니다.
다음은 위의 예제와 필드입니다.이 필드는 확인란의 선택이 취소 된 경우에만 확인됩니다.
공공 수업 조건부 : 페이지 {
공개 htmlinputcheckbox chksameas;
Public ResearchfieldValidator rfvalshipaddress;
보호 된 재정의 void validate () {) {)
bool enableship =! Chksameas.Checked;
rfvalshipaddress.enabled = enableShip;
base.validate ();
}
}
다음은 클라이언트의 코드입니다.
<입력 유형 = checkbox runat = Server id = chksameas
onclick = onchangesameas ();> 지불 주소와 동일합니다 <br>
<스크립트 언어 = javaScript>
함수 onchangesameas () {
var entleship =! srcelement.status;
validatorenable (rfvalshipaddress, enableShip);
}
</스크립트>
효과적인 규칙 및 유용한 오류 정보
각 검증 장치는 특정 제어의 특정 조건에 대한 특정 오류 정보를 보여줍니다. 처음에는 유효한 지 여부를 확인하는 몇 가지 규칙이 있습니다. 사용자에게 실제 도움말로 오류 정보를 생성하려면 이러한 규칙이 필요합니다.
모든 빈 검증 (필수 필드 밸리 디터 제외)은 유효한 것으로 간주됩니다. 빈 값이 유효하지 않은 경우 일반적으로 필수 필드 바리 디터와 다른 검증자가 필요합니다. 일반적으로 빈 검증 장치 및 효과에 대한 다른 오류 정보를 항상 표시하려고하므로이를 수행해야합니다. "값을 입력해야 하며이 값은 1에서 10 사이 여야합니다"와 같은 명확한 정보를 사용할 수도 있습니다.
입력 필드를 지정된 데이터 유형으로 변환 할 수없는 경우 사용되는 또 다른 특수 규칙은 CompareValidator 및 RangeValidator와 관련이 있습니다. ControlToCompare의 비교 측정기의 유효성 평가 프로세스는 유효성 평가 프로세스를 지정합니다.
ControlTovalidate에 의해 참조 된 입력 필드가 비어 있으면 효과적입니다.
ControlTovalidate에 의해 참조 된 입력 필드를 필요한 데이터 유형으로 변환 할 수없는 경우 유효하지 않습니다.
ControlToCompare에서 참조 된 입력 필드를 필요한 데이터 유형으로 변환 할 수없는 경우 유효합니다.
입력 필드는 필요한 데이터 유형으로 변환되며 비교됩니다.
세 번째 단계는 약간 일관성이없는 것처럼 보입니다. 그 이유는 검증 장치가 여러 필드의 효과를 동시에 확인하면 검증 장치에 대한 의미있는 오류 정보를 작성하기가 어렵 기 때문입니다. ControlToCompare 입력 필드의 오류 상황을보고하는 데 독립적 인 검증 장치를 사용해야합니다. RangeValidator는 최대 및 최소 특성을 갖는 비슷한 작업 방법을 가지고 있습니다.
활성화, 가시 및 표시 속성 기능
검증 장치의 활성화, 가시 및 디스플레이 특성의 차이는 그다지 분명하지 않을 수 있습니다.
display = none은 검증 장치가 컨텐츠를 직접 표시하지 않지만 여전히 평가하고 여전히 전체 효과에 영향을 미치며 클라이언트 및 서버 요약에 오류를 가질 수 있음을 지정하는 데 사용될 수 있습니다. 클라이언트 확인의 경우 이러한 값은 가시 스타일 특성을 사용하거나 디스플레이 스타일 특성을 사용하여 검증 장치를 열거 나 닫기로 결정됩니다. 서버 -사이드 검증의 경우 display = dynamic은 입력이 유효 할 때 입력이 컨텐츠를 표시하지 않음을 의미하며, display = static은 ()을 변경하지 않는 공간을 나타냅니다. 테이블의 검증 장치 만 포함 된 셀이 유효 할 때 마지막 설정은 콘텐츠로 접히는 것입니다.
Visive = False를 사용하여 검증 장치를 보이게하는 이유는 무엇입니까? ASP+에서 컨트롤의 가시 속성은 많은 의미를 갖습니다. 가시적 = 거짓의 제어는 전혀 처리되거나 표시되지 않습니다. 이 의미 때문에 검증 장치의 가시적 = false는 콘텐츠를 표시 할뿐만 아니라 사용할 수 없다는 것을 의미합니다. 이 검증 장치는 평가되지 않으며 페이지의 유효성에 영향을 미치지 않으며 초록에 넣지 않습니다.
활성화 된 것은 중립적입니다. 대부분의 경우 enabled = false 및 visible = false의 효과는 정확히 동일합니다. 베타 1 판 이상의 버전에서는 중요한 차이가 있습니다. 클라이언트 확인에서 비활성화 된 검증 장치는 여전히 브라우저로 전송되지만 장애인 상태에 있습니다. 클라이언트 스크립트에서 validatorenable 함수를 사용하여 확인 장치를 활성화 할 수 있습니다.
표시할지 여부를 제어하기 위해 표시되거나 활성화 된 경우 위 서버의 주문 순서에주의를 기울이십시오. 또는 확인 전에 변경하거나 변경 후 다시 검사하십시오. 그렇지 않으면, 그들의 isvalid 값은 속성에 대한 변화를 반영하지 않습니다.
CustomValidator 제어
검증 프레임 워크를 확장하는 가장 쉬운 방법은 CustomValidator 컨트롤을 사용하는 것입니다. 이 컨트롤은 다른 검증 컨트롤을 수행 할 수없는 검증을 수행하는 데 사용될 수 있지만 서버 (예 : 데이터베이스 또는 웹 서비스)의 정보에 액세스 해야하는 검증을 실행할 수도 있습니다.
서버 확인 기능이 하나만있는 CustomValidator가 추가되면 확인 장치가 클라이언트 확인에 참여하지 않음을 알 수 있습니다. 사용자가 탭 키로 각 필드를 전환하면 CustomValidator가 업데이트되지 않으며 Round -Trip 서버는 한 번에 확인을 수행해야합니다. CustomValidator를 사용하여 서버에 정보가 필요하지 않은 수표를 수행하려면 ClientValidationFunction 속성을 사용하여 검증 장치가 클라이언트 확인에 완전히 참여하도록 할 수도 있습니다. ClientValidationFunction은 서버 검증 처리 프로세스와 정확히 동일한 검사를 수행해야한다고 가정합니다. 그러나 실제로는 검증의 일부일뿐입니다. 해커가 확인 기능을 쉽게 우회 할 수 있기 때문에 클라이언트 확인 기능의 확인은 서버에서 실행 검증을 초과하지 않습니다.
다음은 클라이언트와 서버에서 CustomValidator를 사용하는 간단한 예입니다. 입력이 짝수 여부 만 확인하십시오. 서버 기능 (C#)을 소개하겠습니다.
{부분 서비스) {위치
노력하다 {
int i = int.fromString (값);
return ((i % 2) == 0);
} 잡다 {
거짓을 반환합니다.
}
}
다음은 클라이언트의 함수의 선언 방법과 동일한 점검을 수행하는 클라이언트 검증 기능입니다. 이것은 일반적으로 JScript 양식이지만 목표가 Microsoft® Internet Explorer 인 경우 VBScript® 양식을 사용할 수도 있습니다.
<asp : customValidator id = customVal2 runat = Server
errormessage = 숫자를 제거 할 수 없습니다!
ControlTovalidate = TxtCustomData
onservalidationFunction = ServerValidation
ClientValidationFunction = Checkeven /> <br>
데이터 필드 : <asp : textbox id = txtcustosdata runat = server />
<스크립트 언어 = javaScript>
<!-
함수 checkeven (소스, 값) {{
var value = parseint (값, 10);
if (isnan (val))
거짓을 반환합니다.
return ((val % 2) == 0);
}
//->
</스크립트>
CustomValidator를 사용하는 몇 가지 예방 조치는 다음과 같습니다.
다른 모든 검증 컨트롤 (필수 필드 발리 디터 제외)과 유사하게 입력 필드가 비어 있으면 CustomValidator가 효과적인 것으로 간주됩니다.
이전 브라우저가 사용되거나 클라이언트 확인이 닫히면 클라이언트 확인 기능을 호출 할 수 없습니다. 함수를 정의하기 전에 브라우저에 사용 된 브라우저의 기능을 확인할 필요는 없지만 브라우저가 정의로 인해 스크립트 오류가 발생하지 않도록해야합니다. 다음 예에서 볼 수 있듯이 클라이언트 코드를 HTML 주석으로 만들어야합니다.
두 매개 변수가 클라이언트 함수로 전달되며 서버 기능에 전달 된 매개 변수에 해당합니다. 첫 번째는 클라이언트 검증 장치 요소이고 두 번째는 ControlTovalidate에 의해 지정된 제어 값입니다. 그러나 클라이언트에서는 함수의 매개 변수를 정의하지 않도록 선택할 수 있으며, 이는 정상적으로 작동합니다.
Beta1 이상의 버전을 사용하는 경우 ControlTovalidate를 비어있을 수 있습니다. 이 모드에서 서버 기능은 항상 라운드 트립 왕복을 트리거하며 제출할 때마다 클라이언트 기능이 항상 트리거됩니다. 이 기능을 사용하여 CheckboxList 또는 별도의 라디오 버튼과 같은 다른 메소드가 확인할 수없는 컨트롤을 확인할 수 있습니다. 조건이 여러 컨트롤을 기반으로하고 페이지의 각 필드를 전환 할 때 조건을 평가하지 않으려면이 메소드를 사용할 수 있습니다.
베타 1 이상의 버전의 또 다른 옵션은 여러 컨트롤의 변경 이벤트입니다. 이 방법은 위에서 설명한대로 클라이언트 기능 validatorhookupcontrol이라고하는 임베디드 스크립트를 추가하는 것입니다.
어떤 컨트롤을 확인할 수 있습니까?
제어 기준에 의해 컨트롤을 확인할 수 있으려면 컨트롤에 속성이 확인되어야합니다. 모든 검증 된 컨트롤에는 ValidationPropertyAttribute 속성이 있으며 검증 중에 읽어야 할 속성을 나타냅니다. 자신의 컨트롤을 작성하는 경우 컨트롤을 제공하여 사용할 속성을 지정하여 제어가 검증에 관여하도록 할 수 있습니다.
클라이언트에서 검증을 정상적으로 수행 할 수 있으려면 속성은 클라이언트가 표시하는 HTML 요소의 값 특성에 해당해야합니다. 많은 복잡한 컨트롤 (예 : Datagrid 및 Calendar)은 클라이언트의 가치가 없으며 서버에서만 확인할 수 있습니다. 따라서 HTML 요소에 가장 가까운 제어 만 검증에 참여할 수 있습니다. 또한 Control은 클라이언트에 단일 로직 값이 있어야합니다. 따라서 RadioButtonList를 확인할 수 있지만 CheckBoxList는 할 수 없습니다.
끝
위에서 언급 한 ASP+ 검증에 대한 설명이 이해하려는 컨텐츠를 초과했을 수 있습니다. 즐기세요!