クライアントAPI
クライアントでさまざまな効果を達成するためにクライアントに使用できる小さなAPIがあります。一部のルーチンを非表示にすることはできないため、理論的には、クライアントを使用して、クライアントによって定義されたすべての変数、特性、および機能を確認できます。ただし、それらの多くは変更できます。以下は、使用することをお勧めするクライアントオブジェクトをまとめたものです。
表3。クライアントオブジェクト
名前タイプの説明
page_isvalid boolean変数は、ページが現在有効かどうかを指摘しました。スクリプトの検証は、常に変数を最新の状態に保ちます。
page_validator要素配列これは、ページ上のすべての検証を含む配列です。
page_validationactiveブール変数は、検証する必要があるかどうかを示します。この変数をfalseに設定することは、プログラミングによって証明できます。
ISVALID BOOLEN属性各クライアント検証デバイスにはプロパティがあり、検証デバイスが現在有効かどうかを指摘しています。 PDCバージョンでは、この属性はiSValidと混合されていることに注意してください。
クライアントの検証をバイパスします
多くの場合、実行する必要があるタスクの1つは、ページに[キャンセル]ボタンまたはナビゲーションボタンを追加することです。この場合、ページにエラーがある場合でも、ボタンを使用してページを送信することもできます。クライアントボタンのオンクリックイベントは、フォームの登録イベントの前に発生するため、検査の送信と検証のバイパスを避ける場合があります。以下は、「キャンセル」ボタンとしてHTMLイメージコントロールを使用する方法を示しています。
<入力型=画像runat = server
値=キャンセル
onclick = page_validationactive = false;
onserverclight = cmdcancel_click>
OnClickイベントは、同じ名前のサーバー側イベントであると想定しているため、ボタンまたはImageButtonコントロールを使用して混乱を実行します。このイベントをクライアントスクリプトで設定する必要があります。
<ASP:ImageButton runat = server id = cmdimgcancel
AlternateText =キャンセル
onclick = cmdcancel_click/>
<スクリプト言語= javascript>
document.all [cmdimgcancel] .onclick =
新しい関数(page_validationactive = false;);
</script>
この問題を解決するもう1つの方法は、「キャンセル」ボタンの特定の設定を設定して、返信時にクライアントスクリプトの送信イベントをトリガーしないようにすることです。 htmlinputbuttonとlinkbuttonコントロールが例です。
特殊効果
別の一般的な要件は、検証デバイス自体によって表示されるエラー情報に加えて、他の効果が必要であることです。この場合、あなたが行った変更は、サーバーまたはクライアントで同時に実行する必要があります。入力が有効かどうかに応じて、色を変更するためにラベルを追加する必要があるとします。以下は、このタスクをサーバーに実装する方法です。
パブリッククラスChangeColorpage:ページ{
パブリックラベルlblzip;
public RegulAxpressionValidator値。
保護されたオーバーライドvoidオーバーロード(eventargs e){{{
lblzip.forecolor = valzip.isvalid.black:color.red;
}
}
上記の方法はすべて完璧ですが、上記の検証を変更する限り、クライアントで同じ操作を実行しない限り、非常に矛盾しているように見えることがわかります。検証フレームワークを使用すると、このようなデュアル効果の多くを回避できますが、クライアントとサーバーで同時に達成する必要がある他の効果を回避することはできません。以下は、クライアントで同じタスクを実行するフラグメントです。
<ASP:ラベルID = lblzip runat = server
Text = zip Code:/>
<asp:textbox id = txtzip runat = server
onchange = txtziponchange();
<asp:remolltpressionValididator ID = valzip runat = server
controltovalidate = txtzip
errormessage =無効な郵便番号
validationXpression = [0-9] {5} /> <br>
<スクリプト言語= javascript>
function txtziponchange(){{){
//クライアントの検証がアクティビティにない場合、操作は実行されません
ifof(page_validators)== undefined)return;
//ラベルの色を変更します
lblzip.style.color = valzip.isvalid:red;
}
</script>
ベータ1クライアントAPI
ベータ1エディションの場合、クライアントスクリプトから呼び出すことができるいくつかの関数は、他の状況を引き起こします。
表4。クライアントスクリプト呼び出しからの機能
名前の説明
validatorValidate(VAL)は、クライアント検証デバイスを入力として使用します。検証装置に入力を確認し、ディスプレイを更新します。
validatorEnable(val、enable)クライアント検証デバイスとブール値を取得します。クライアント検証デバイスを有効または無効にします。無効になっている場合、クライアント検証デバイスは評価されず、クライアントバリエーターは常に有効です。
ValidatorHookupControl(Control、VAL)は、入力HTML要素とクライアント検証デバイスを取得しました。変更中に検証デバイスを更新できるように、要素の変更イベントを変更または作成します。この関数は、複数の入力値に基づいたカスタマイズされた検証に適しています。
その特別な目的は、検証装置を有効または無効にすることです。特定の状況でのみ有効になっていることを確認する場合は、サーバーとクライアントのアクティベーションステータスを同時に変更する必要がある場合があります。そうしないと、ユーザーがページを送信できないことがわかります。
以下は、上記の例と、チェックボックスの選択がキャンセルされた場合にのみ、フィールドが検証されます。
パブリッククラスの条件:ページ{
public htmlinputcheckbox chksameas;
Public ResearchFieldValidator rfvalshipAddress;
保護されたオーバーライドvoid validate(){){)
bool enableship =!
rfvalshipaddress.enabled = enableShip;
base.validate();
}
}
以下は、クライアントに相当するコードです。
<入力タイプ=チェックボックスrunat = server id = chksameas
onclick = onchangesameas();>支払いアドレスと同じ<br>
<スクリプト言語= javascript>
function onchangesameas(){
var entleship =!
validatorEnable(rfvalshipAddress、enableShip);
}
</script>
効果的なルールと有用なエラー情報
各検証デバイスは、特定のコントロールの特定の条件に関する特定のエラー情報を表示します。最初に有効かどうかを確認するルールがいくつかありますが、ユーザーに実際のヘルプでエラー情報を生成したい場合は、これらのルールが必要です。
すべての空の検証(必要なフィールドバリデーターを除く)は有効と見なされます。空の値が無効である場合、通常、必要なFieldValidatorと他の検証装置が必要です。これを行う必要があります。一般に、空の検証デバイスと有効性に関する異なるエラー情報を常に表示する必要があるためです。 「値を入力する必要があり、この値は1〜10でなければならない」など、不明確な情報を使用することもできます。
入力フィールドを指定されたデータ型に変換できないときに使用される別の特別なルールは、CompareValidatorとRangeValidatorに関連しています。 ControlToCompareの比較的検査の有効性評価プロセスは、妥当性評価プロセスを以下に説明します。
ControlTovalidateによって参照される入力フィールドが空である場合、それは効果的です。
ControlTovalidateによって参照される入力フィールドを必要なデータ型に変換できない場合、無効です。
ControlToCompareによって参照される入力フィールドを必要なデータ型に変換できない場合、有効です。
入力フィールドは、必要なデータ型に変換され、比較されます。
3番目のステップは少し一貫性がありません。この理由は、検証装置が複数のフィールドの有効性を同時にチェックする場合、検証デバイスに意味のあるエラー情報を記述することが困難であるためです。独立した検証デバイスを使用して、ControlToCompare入力フィールドのエラー状況を報告する必要があります。 rangevalidatorには、最大および最小プロパティを備えた同様の作業方法があります。
有効化、可視、表示プロパティの機能
検証デバイスの有効化、可視、表示プロパティの違いはあまり明白ではない場合があります。
display = NONTEABONIFIFICATIONデバイスは、コンテンツを直接表示しないが、それでも評価され、全体的な有効性に影響を与え、クライアントとサーバーの要約にエラーを出すことができることを指定することができます。クライアントの検証のために、これらの値は、可視スタイルの特性を使用するか、表示スタイルの特性を使用して検証デバイスを開閉するように決定されます。サーバー - 側面検証の場合、display = dynamicとは、入力が有効な場合に入力がコンテンツを表示しないことを意味し、display = staticは変更されない空間を表します()。最後の設定は、テーブル内に検証装置のみを含むセルが有効である場合、コンテンツなしに折りたたむことです。
Visible = falseを使用して検証装置を表示できるようにしないのはなぜですか? ASP+では、コントロールの可視属性には多くの意味があります。可視= falseの制御は、まったく処理または表示されません。これはまさにこの意味のためです。検証装置の可視= Falseは、コンテンツを表示しないだけでなく、使用できないことを意味します。この検証デバイスは評価されず、ページの有効性に影響を与えず、抽象にも掲載されません。
有効化はニュートラルです。ほとんどの場合、有効= falseとvisible = falseの効果はまったく同じです。ベータ1エディション以上のバージョンでは、重要な違いがあります。クライアント検証では、無効化された検証デバイスが引き続きブラウザに送信されますが、障害のある状態です。クライアントスクリプトでvalidatorenable関数を使用して、検証デバイスをアクティブにすることができます。
Visibleまたは有効にして検証するかどうかを制御する場合は、上記のサーバーの注文に注意してください。または、確認前に変更するか、変更後に再検証します。それ以外の場合、それらのisValid値は属性の変更を反映していません。
CustomValidatorコントロール
検証フレームワークを拡張する最も簡単な方法は、CustomValidatorコントロールを使用することです。このコントロールを使用して、他の検証コントロールを実行できない検証を実行できますが、サーバー上の情報にアクセスする必要がある検証(データベースやWebサービスなど)を実行することもできます。
1つのサーバー検証関数のみを備えたCustomValidatorが追加された場合、検証デバイスがクライアント検証に参加していないことに気付くでしょう。ユーザーがTABキーを使用して各フィールドを切り替えると、CustomValidatorは更新されず、ラウンドトリップサーバーは一度にその検証を実行する必要があります。 CustomValidatorを使用してサーバー上の情報を必要としないチェックを実行する場合は、ClientValidationFunctionプロパティを使用して、検証デバイスをクライアント検証に完全に参加させることもできます。 ClientValidationFunctionを提供すると、サーバー検証処理プロセスとまったく同じ検査を実行する必要があります。しかし、実際、それは検証の一部にすぎません。ハッカーが検証関数を簡単にバイパスできるため、クライアント検証関数の検証はサーバー上の実行の検証を超えていません。
以下は、クライアントとサーバーでCustomValidatorを使用する簡単な例であり、入力が偶数かどうかを確認します。サーバー機能を紹介しましょう(C#):
{部分的なサービス){位置
試す {
int i = int.fromstring(value);
return((i%2)== 0);
} catch {
falseを返します。
}
}
以下は、クライアントの関数の宣言方法と、同じチェックを実行するクライアント検証関数です。これは通常JScriptフォームですが、目標がMicrosoft®InternetExplorerの場合は、VBScript®フォームを使用することもできます。
<asp:customvalidator id = customval2 runat = server
errormessage =数字を削除できません!
Validate = txtcustomdataを制御します
OnServalidationFunction = serverValidation
clientValidationFunction = checkeven /> <br>
データフィールド:<asp:textbox id = txtcustosdata runat = server />
<スクリプト言語= javascript>
<! -
function checkeven(source、value){{
var value = parseint(value、10);
if(isnan(val))
falseを返します。
return((val%2)== 0);
}
//->
</script>
CustomValidatorを使用した予防措置は次のとおりです。
他のすべての検証コントロール(必要なフィールドバリデーターを除く)と同様に、入力フィールドが空の場合、CustomValidatorが効果的であると見なされます。
古いブラウザが使用されている場合、またはクライアントの確認が閉じられている場合、クライアント検証関数を呼び出すことはできません。関数を定義する前に、ブラウザで使用されているブラウザの関数を確認する必要はありませんが、ブラウザが定義によりスクリプトエラーを引き起こさないことを確認する必要があります。次の例に示すように、必ずHTMLの注釈としてクライアントコードを作成してください。
2つのパラメーターがクライアント機能に渡され、サーバー関数に渡されたパラメーターに対応します。 1つ目はクライアント検証デバイス要素で、2つ目はコントロールトゥーバリデートによって指定された制御値です。ただし、クライアントでは、機能のパラメーターを定義しないことを選択できます。これは正常に機能します。
Beta1以降を使用している場合は、空のように検証するために制御を維持できます。このモードでは、サーバー関数は常にラウンドトリップラウンドトリップをトリガーし、クライアント機能は常に送信しようとするたびにトリガーされます。この機能を使用して、チェックボックスリストや独立したラジオボタンなど、他のメソッドが検証できないコントロールを確認できます。条件が複数のコントロールに基づいており、ページ上の各フィールドを切り替えるときにユーザーが条件を評価したくない場合は、この方法を使用できます。
ベータ1以下のバージョンの別のオプションは、複数のコントロールの変更イベントです。この方法は、上記のように、クライアント関数のbalidatorhookupControlを呼び出すいくつかの組み込みスクリプトを追加することです。
どのコントロールを検証できますか?
コントロールをコントロール参照によって検証できるようにするには、コントロールが属性を検証している必要があります。すべての検証済みのコントロールには、検証中に読み取る必要がある属性を示す検証プロパティプロパティがあります。独自のコントロールを書く場合、そのいずれかを提供することにより、使用する属性を指定して、コントロールが検証に関与するように指定できます。
クライアントに対して検証を正常に実行できるようにするには、属性がクライアントによって表示されるHTML要素の値特性に対応する必要があります。多くの複雑なコントロール(Datagridやカレンダーなど)はクライアントの価値がなく、サーバーでのみ検証することができます。したがって、HTML要素に最も近いコントロールのみが検証に参加できます。さらに、コントロールはクライアントに単一のロジック値を持つ必要があります。したがって、RadioButtonListを検証できますが、チェックボックスリストはできません。
終わり
ASP+検証の上記の説明は、理解したいコンテンツを超えている可能性があります。楽しめ!