概要:ASP+検証Webコントロールの使用に関する詳細な説明。
目次
簡単な紹介
はじめる
いつ起こりますか?
サーバー側の検証シーケンス
クライアント検証
効果的なルールと有用なエラー情報
有効化、可視、表示プロパティの機能
CustomValidatorコントロール
どのコントロールを検証できますか?
終わり
-------------------------------------------------------------- -------------------------------------------------------------- -----------------------------
簡単な紹介
この記事では、ASP+検証制御の作業方法について詳しく説明します。検証制御を含む複雑なページを生成する場合、または検証フレームワークを拡張する場合は、この記事を読むことをお勧めします。検証コントロールを使用するか、検証コントロールを使用するかどうかを決定する場合は、「ASP+ユーザーEnter Verification(英語)」を参照してください。
はじめる
ASP+開発プロセス全体で検証を理解することが重要であることを知っています。今日の商用Webサイトのほとんどを見ると、これらのサイトには多くのフォームがあり、これは明らかに多数の手書きコードを実行することで実行されます。検証コードを書くことは興味深い仕事ではありません。データテーブルを表示したり、チャートを動的に生成したりするコードを作成した場合、非常に魅力的かもしれませんが、この「クールな」方法が名前フィールドの空の値を禁止できることを同僚と確認することはできません。
他の理由から、Webアプリケーションの検証も非常に面倒です。 HTML 3.2には、ユーザーから取得できるコンテンツまたはフィードバックを制御できるコンテンツに多くの制限があるため、ユーザーが特定の文字を入力することを禁止するなど、より充実したクライアントに使用できる手法には適用できません。音を立てる。ブラウザスクリプトを使用すると、より強力な検証が生じる場合があります。ただし、顧客のブラウザは必ずしもスクリプトではなく、悪意のあるユーザーがバイパスできるため、この方法を確認することは困難です。したがって、サイトの安全性を確保するためには、サーバーの同じ検査を実行する必要があります。
ASP+を開発する場合、当初の意図は、1つのコントロールのみを使用して検証を処理することです。しかし、それが設計されたとき、私はこの欲求を達成できないことがわかりました。できるだけ多くのフォームに適用できるソリューションを見つけるために、多数のデータ入力フォームを調査しました。データ入力テーブルには多くの興味深い機能があることがわかりました。
エラー情報またはアイコンは多くの場合、入力要素に隣接していますが、ほとんどの場合、テーブルの異なるセルにあります。
多くの場合、すべてのエラーを要約するためにページに領域があります。
多くのサイトには、クライアントスクリプトが含まれており、より高速なフィードバックを提供しながら、サーバー間の旅行を無駄に防止します。
クライアントスクリプトを含む多くのサイトは、エラーが発生したときに情報ボックスを表示します。
テキスト入力が検証されるだけでなく、ドロップダウンリストと単一の選択ボタンも検証されます。
フィールドが空の場合、サイトには通常、エントリが無効なときに異なる情報またはアイコンが表示されます。
多くの効果的な検査は、一般的に使用される表現によく置き換えることができます。
検証は通常、2つの入力間の比較結果に基づいています。
検証タスクの90%または90%以上は、名前や郵便番号のチェックなど、いくつかの一般的な操作です。ほとんどのサイトはまだこれらのタスクを繰り返しているようです。
サイト間の違いは通常大きすぎるため、各サイトのすべての検証タスクを処理するための完璧なソリューションを取得することはできません。
上記のすべての状況を考慮すると、最終的なソリューションには、5つの検証デバイスコントロール、検証ムマリーコントロール、およびページオブジェクトとの統合が含まれます。同時に、ソリューションを拡張する必要があることは明らかであり、クライアントとサーバーに協力するためにAPIが必要であることは明らかです。
研究のさまざまな検証中に、より大きなツールボックスが必要であるように思われました。 Microsoft&Reg; Activex&Reg;などのほとんどのコンポーネント環境では、すべての検証制御の機能を制御に統合して、異なるモードで異なる属性を処理しようとした可能性があります。幸いなことに、Microsoft&Reg; .NETフレームワークには魔法の継承があります。これは、新しいコントロールごとに必要な追加のワーキングロードが非常に小さいため、一連のコントロールを提供できます。
これらのコントロールのほとんどは、パブリックレベルのベースバリデーターに実装されています。また、Basevalidatorまたは他のコントロールからさまざまなタスクを完了することもできます。実際、BaseValidatorが独自のテキスト属性を実現できない場合でも、ラベル属性から継承されます。
いつ起こりますか?
Webコントロールのページを含むページを処理する際に、イベントシーケンスを理解することは非常に効果的です。検証条件がオプションである場合、クライアントとサーバーが確認されたときに正確に理解する必要があります。自分で検証ルーチンを書きたい場合は、非常に時間がかかるか副作用があるかもしれません。同時に、検証ルーチンを呼び出すタイミングを理解することも重要です。
まず、サーバーを見てみましょう。
サーバー側の検証シーケンス
ページの有効期間を理解することが重要です。視覚的な基本的または同様の機能的クライアントツールでフォームを処理することに慣れている場合は、理解するために一定の時間を費やす必要があります。ページとページ上のすべてのオブジェクトは、ユーザーと対話するときに効果的ではありませんが、これは同じこともあります。
以下は、初めてページにアクセスする際の単純化されたイベントシーケンスです。
ASPXファイルに基づいてページとそのコントロールを作成します。
page_loadイベントのトリガー。
ページと制御属性は、隠されたフィールドに保存されます。
ページとコントロールはHTMLに変換されます。
すべてを捨てます。
これで、ユーザーがボタンまたは同様のコントロールをクリックすると、サーバーに戻り、同様のイベントシーケンスを実行します。このシーケンスは、リターンシーケンスと呼ばれます。
ASPXファイルに基づいてページとそのコントロールを作成します。
非表示フィールドからページと制御属性を復元します。
ユーザーに応じて更新ページコントロールを入力します。
page_loadイベントのトリガー。
トリガー通知イベントを変更します。
ページと制御属性は、隠されたフィールドに保存されます。
ページとコントロールはHTMLに変換されます。
すべてをもう一度捨ててください。
すべてのオブジェクトをメモリに保管してみませんか? ASP+で確立されたWebサイトは、非常に多くのユーザーを処理できないためです。したがって、サーバーのメモリは、すぐに処理されるコンテンツのみを保持します。
サーバー側の検証はいつですか?ページ情報を初めて取得する場合、サーバー側の検証はまったく実行されません。ほとんどのエンドユーザーは非常に深刻です。ユーザーは、フォームに記入された情報が正しいかどうかを確認し、赤いテキストを使用してユーザーに間違った情報を入力します。
戻りイベントシーケンスでは、ステップ3からステップ4の間に検証が実行されます。言い換えれば、検証は、ユーザーからのデータロード制御属性の後に、しかしほとんどのコード実行の数の前にあります。これは、ユーザーイベントを作成するときに、通常は検証に使用できることを意味します。通常の状況では、これを行いたいと思うでしょう。
その時点での検証の欠点は、プログラミングによる検証に影響を与えるいくつかの属性を変更したい場合、手遅れになります。たとえば、コードを使用して検証制御の属性を有効または無効にする場合、または検証コントロールを変更する場合、ページを処理する前に効果が表示されないことがわかります。この問題は、次の2つの方法で回避できます。
検証前に属性を変更します。
属性の変更後にコントロールを再検証します。
どちらの方法でも、ページオブジェクトで効果的な検証属性とメソッドを使用する必要があります。
ページAPI
ページオブジェクトには、サーバー側の検証に関連するいくつかの重要な属性とメソッドが含まれます。表1は、これらの属性と方法をまとめたものです。
表1。ページオブジェクトの属性とメソッド
属性またはメソッドの説明
IsValid属性は最も有用な属性です。この属性は、フォーム全体が効果的かどうかを確認できます。このチェックは通常、データベースを更新する前に実行されます。バリデーターのすべてのオブジェクトのみが有効であり、属性は真であり、値はキャッシュに保存されません。
Validatorsは、このページのすべての検証オブジェクトのコレクションを属性にします。これは、ivalidatorインターフェイスを実装するオブジェクトのコレクションです。
値メソッドは、検証時にメソッドを呼び出します。ページオブジェクトのデフォルトの実行方法は、各検証デバイスに頼り、検証デバイスが自体を評価する必要があることです。
Validatorsコレクションは、多くのタスクに非常に役立ちます。このセットは、ivalidatorインターフェイスを実装するオブジェクトのコレクションです。私がオブジェクトを使用する理由は、ページオブジェクトがivalidatorインターフェイスにのみ注意を払うため、コントロールの制御ではありません。すべての検証は通常、ivalidatorの視覚的制御を実現するために使用されるため、検証オブジェクトを使用して検証オブジェクトをページに追加できるはずです。
ivalidatorインターフェイスには、次の属性と方法が含まれています。
表2。Ivalidatorインターフェイスの属性と方法
属性またはメソッドの説明
ISValid属性は、個別の検証オブジェクトによって実行された有効性テストが渡されたかどうかを指摘しました。検証後に値を手動で変更できます。
ErrorMessage属性は、検証するオブジェクトを確認するためのエラーと、ユーザーに表示されるエラーを確認します。
検証メソッドは、検証オブジェクトの有効性をチェックして、そのvalid値を更新します。
このインターフェイスを使用して、いくつかの興味深いタスクを実行できます。たとえば、ページを効果的な状態にリセットするには、次のコード(C#に示す例など)を使用します。
ivalidator値;
foreach(バリネーターのval){
valueValid = true;
}
検証シーケンス全体を再実行するには、次のコードを使用します。
ivalidator値;
foreach(バリネーターのval){
val.Validate();
}
ベータ1エディション以下のバージョンがある場合は、同じタスクを完了できるように、ページオブジェクトの値メソッドを呼び出すこともできます。検証の前にいくつかの変更を加えるために、値メソッドをカバーできます。この例は、チェックボックスの値に応じて開くかオフにする検証装置を含むページを示しています。
パブリッククラスの条件:ページ{
public htmlinputcheckbox chksameas;
Public ResearchFieldValidator rfvalshipAddress;
保護されたオーバーライドvoid validate(){){)
//配送先住所を確認するだけです(支払いアドレスとは異なる場合)
bool enableship =!
rfvalshipaddress.enabled = enableShip;
//検証を実行しています
base.validate();
}
}
クライアント検証
クライアント検証によってページが有効になっている場合、往復中にまったく異なるイベントシーケンスが発生します。クライアントの検証は、クライアントJScript®を使用します。検証では、バイナリコンポーネントは必要ありません。
JScript言語の標準化はよく実行されていますが、ブラウザ(DOM)のHTMLドキュメントで使用されているドキュメントオブジェクトモデル(DOM)は、広く使用されていません。したがって、クライアントの検証は、検証されたオブジェクトがインターネットエクスプローラーDOMであるため、インターネットエクスプローラー4.0以降でのみ実行されます。
サーバーの観点から見ると、クライアントの検証は、検証制御が異なるコンテンツをHTMLに送信することを意味します。さらに、インシデントシーケンスはまったく同じです。サーバー側のチェックは引き続き実行されます。それは冗長のようですが、それは非常に重要です。
一部の検証コントロールは、クライアントスクリプトをサポートしていない場合があります。良い例があります。CustomValidatorとサーバーの検証関数を同時に使用するが、クライアント検証機能はありません。
安全上の注意。一部の人々は、スクリプトを含むページを簡単に取得し、ページを無効または変更できます。悪いデータがシステムに入るのを防ぐためにスクリプトを使用しないでください。したがって、CustomValidatorを使用する場合は、対応するサーバー検証関数なしでクライアント検証機能を提供しないでください。
各検証制御により、標準のクライアントスクリプトブロックがページに送信されるようにします。実際、これはコードのほんの一部であり、スクリプトライブラリWebUivalidation.jsのコードへの参照が含まれています。このスクリプトライブラリファイルには、クライアントによって検証されたすべてのロジックが含まれています。
スクリプトライブラリについて
Webコントロールスクリプトの検証はスクリプトライブラリにあるため、すべてのクライアントによって検証されたコードは、表面上で行われているように見えますが、ページに直接送信する必要はありません。メインスクリプトファイルの参照は、次のものに似ています。
<スクリプト言語= javascript
src =/_ aspx/1.0.9999/script/webuivalidation.js> </scrip>
デフォルトでは、スクリプトファイルは_aspxディレクトリのデフォルトのルートディレクトリにインストールされ、スクリプトに含まれる命令を使用して、肯定的な対角線で始まる命令を使用します。参照は、個々のオブジェクトがスクリプトライブラリを含める必要がなく、同じコンピューター上のすべてのページが同じファイルを参照できることを示しています。このパスには、異なるランタイムバージョンが同じコンピューターで実行できるように、このパスには一般言語バージョン番号もあることに気付くでしょう。
デフォルトの仮想ルートディレクトリを見ると、ファイルを見つけてコンテンツを表示します。これらのファイルの位置は、config.webファイルで指定されています。 config.webファイルは、ほとんどのASP+設定のXMLファイルです。以下は、このファイルの位置の定義です。
<webControls
clientscriptslocation =/_ aspx/{0}/script/
/>
詳細に発生するイベントを理解できるように、スクリプトを読むことをお勧めします。ただし、機能は特定のランタイムバージョンに密接にリンクされているため、これらのスクリプトを変更しないことをお勧めします。バージョンが更新されると、これらのスクリプトをそれに応じて更新する必要があります。特定のプロジェクトを変更する必要がある場合は、最初にこれらのスクリプトをバックアップしてから、プロジェクトをバックアップファイルに向けます。この方法は、プライベートconfig.webファイルを使用してこれらのファイルの位置を置き換えることです。文字列にフォーマットコマンド{0}が含まれている場合、ランタイムバージョン番号が置き換えると、バージョン番号が命令を置き換えます。この位置を相対的な参照または絶対的な参照に変更することが最善です。
クライアントの検証を無効にします
クライアントを検証したくない場合があります。入力フィールドの数が小さい場合、クライアントの検証はあまり役に立たない場合があります。結局のところ、毎回1つのラウンドトリップサーバーを必要とするロジックが必要です。クライアントの動的な情報は、レイアウトにマイナスの影響を与えることがわかります。
クライアントの確認を無効にするには、ページ命令ClientTarget = downLevelを使用します。この命令は、ASPXファイルの開始に似ています。
<%@ページ言語= c#clientTarget = downlevel%>
この命令のデフォルト値はAUTOであり、Microsoft Internet Explorer 4.0以下のバージョンのクライアントのみを確認することを示します。
注:残念ながら、ベータ1では、この命令は検証のために無効になっているだけでなく、同時にすべてのWebコントロールがHTML 3.2タグを使用して処理する可能性があります。最終バージョンは、この問題を制御するためのより良い方法を提供します。
クライアントイベントシーケンス
このシーケンスは、クライアントの検証を含むページが発生するイベントシーケンスです。
ページにブラウザをロードするときは、各検証コントロールを初期化する必要があります。これらのコントロールは<Span>マークとして送信され、HTML機能はサーバー上の機能に最も近いものです。最も重要なことは、検証装置によって参照されるすべての入力要素は、現時点で「絞首刑」されることです。参照された入力要素は、変更を入力するときに確認ルーチンを呼び出すためにクライアントイベントを変更します。
スクリプトライブラリのコードは、ユーザーがTABキーを使用して各フィールドを切り替えると実行されます。特定の独立したフィールドが変更されると、検証条件が再評価され、検証装置が必要に応じて表示または見えなくなります。
ユーザーがフォームを送信しようとすると、すべての検証が評価されます。これらすべての確認が効果的である場合、フォームはサーバーに送信されます。 1つ以上の場所でエラーがある場合、次の状況が発生します。
提出はキャンセルされました。フォームはサーバーに送信されません。
すべての無効な検証が表示されます。
検証概要にshosummary = trueが含まれている場合、検証コントロールからのすべてのエラーが収集され、これらのエラーでコンテンツが更新されます。
検証の要約にshowmessagebox = trueが含まれている場合、エラーを収集し、クライアントの情報ボックスにこれらのエラーを表示します。
クライアント検証コントロールが入力時または時期に実行されるためです。提出後、これらの検証制御はサーバー上で再評価されることに注意してください。
クライアント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&Reg;
<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+検証の上記の説明は、理解したいコンテンツを超えている可能性があります。楽しめ!
-------------------------------------------------------------- -------------------------------------------------------------- -----------------------------
このサイトでバージョン800 * 600のビューを使用してください
&Copy;所有権を維持します。規制を使用します。
最も実用的なWebページSpecial Effectコードを収集してください!