.NET TIPS [ASP.NET]検証コントロールで条件付きの検証処理を行うには?山田 祥寛2004/12/03 |
|
|
通常、検証コントロールはあらかじめ必要なパラメータ(プロパティ値)を設定しておくだけで、ほとんどコードを記述することなくユーザー入力を検証することができる。ASP.NETの検証コントロールの詳しい使い方については、別稿「Visual Studio.NETでプログラム・レス開発を学ぶ(前編)」などを併せて参照するとよいだろう。
しかし、検証コントロールのパラメータが必ずしも実行前に決まるとは限らない。例えば以下は、配送サービスを提供するサイトなどでよく見掛けるような「配送希望時刻」の指定画面だ。
配達希望時刻を指定する画面のサンプル |
このようなフォームにおいて、「配達希望時刻」は「配達時刻指定」のチェックボックスが有効である場合にのみ必須とすべき「条件付き」必須項目だ。このように、ほかの入力項目の値によってチェックの内容が変動することはよくあるケースだが、こうした「条件付き検証」の機能は、現時点の検証コントロールでは標準では提供されていない。
そこで本稿では、上のようなフォームで「条件付き検証」を実現するコードの記述方法を紹介する。まず、この機能を実装したサンプル・プログラムを示す。
|
|
条件付き検証を行うための.aspxファイル(C#の場合) |
|
|
条件付き検証を行うための.aspxファイル(VB.NETの場合) |
上記のコードでポイントとなるのは、chk_CheckedChangedメソッドに記述された、検証コントロールのEnabledプロパティの切り替えだ。チェックボックスの定義ではAutoPostBackプロパティをTrueに設定しているため、チェックボックスが変更されたときに、このメソッドが実行される。
このメソッドでは、チェックボックスが有効であるかどうかによって、対応する検証コントロールの有効/無効を切り替えればよい。これによって、「配達時間を指定する」にチェックが入っている場合にのみ、「配達時間」を有効にすることができる。
以下は、上記のコードの実行結果だ。
条件付き検証コントロールを実行したところ |
「配達時刻指定」にチェックを付けており、かつ、「配達希望時刻」が未入力の場合はエラーとなる。 |
ただし、AutoPostBackプロパティを有効にしたコントロールでは、その内容が変更されるたびにクライアント/サーバ間の通信が発生するため、処理上のオーバーヘッドが大きい。こうした条件付き検証項目があまりに多い場合には、Enabledプロパティの切り替えを(変更イベントではなく)[登録]ボタンなどのクリック・イベントのタイミングで行うようにするのが好ましい。その方法については、「[ASP.NET]検証コントロールのパラメータを動的に設定するには?」で紹介している。
カテゴリ:Webフォーム 処理対象:検証 使用ライブラリ:RequiredFieldValidatorコントロール 使用ライブラリ:CheckBoxコントロール 関連TIPS:[ASP.NET]検証コントロールのパラメータを動的に設定するには? |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|