|
.NET TIPS [ASP.NET]検証コントロールのパラメータを動的に設定するには?山田 祥寛2004/12/10 |
![]() |
|
|
|
「TIPS:[ASP.NET]検証コントロールで条件付きの検証処理を行うには?」では、検証コントロールのEnabledプロパティを動的に変更することで、条件付き検証の処理を実現する方法について紹介した。しかし、この手法は単に「条件付き検証」処理の局面だけではなく、以下のような局面にも応用することができるだろう。
例えば、オークション・アプリケーションで入札を行う局面を想定してほしい。入札額は、必ず現在の入札最高額よりも高くなければならない。
このような場合、読者諸氏はどのような実装を考えるだろうか。ページをロードするタイミング(Page_Loadメソッド)で、データベースなどから現在の入札最高額を取得し、CompareValidatorコントロールのValueToCompareプロパティにセットするのが、最もシンプルな方法だろう。
しかし、よく考えてみてほしい。ページをロードしてから、ユーザーはしばらくページを眺める(あるいはそのまま放置する)可能性がある。この間に、ほかのユーザーが新たな入札を行ってしまったら、そこで最高入札額は変わってしまうのだ。その可能性は、たとえユーザーがどんなに素早くデータを入力したとしても、完全に排除することはできない。つまり、このようなアプリケーションでは、最終的に[入札]ボタンをクリックしたタイミングで、リアルタイムに最高入札額を判断するのが好ましい。
以上を踏まえたうえで、具体的なコードを実装してみよう。なお、本稿のサンプルを実行する場合には、あらかじめデータベース上に以下のようなテーブルを作成しておく必要がある。
| フィールド名 | データ型 | 概要 |
| id | INT | 入札ID(主キー。連番) |
| price | INT | 入札額 |
| auctionテーブルのフィールド・レイアウト | ||
|
|
| 入札機能を実装する.aspxファイル(C#の場合) |
|
|
| 入札機能を実装する.aspxファイル(VB.NETの場合) |
btn_Clickメソッドで検証パラメータを動的に設定しているのは、前述のTIPSでも紹介した流れと同様だ。ここで注目していただきたいのは、クリック・イベントによって検証パラメータを決定する場合、あらかじめクライアント検証の機能を無効にする必要があるという点だ。
検証コントロールでは、デフォルトでクライアント/サーバ双方の検証が有効になっている。しかし、今回のようにクリック・イベントで検証パラメータが決定される場合、クライアント検証のタイミングでは正しい検証パラメータが決まっていないので、検証を行う意味がない。デフォルトの設定値によっては、意図しない検証エラーが発生する可能性がある。このような場合には、EnableClientScriptプロパティをFalseに設定し、クライアント検証を無効にしておく必要がある。
以下は、上記のサンプル・コードで不正な値を入力した場合の実行結果だ。ページをロードしてからauctionテーブルの値を変更しても、その内容が検証に反映される点に注目していただきたい。
![]() |
| 入札額の検証 |
| auctionテーブルに格納された最高入札額よりも小さな値を入力した場合はエラーとなる。 |
なお、検証パラメータを動的に設定する際に、最終的にクリック・イベントのタイミングで行うことは、処理パフォーマンスという意味でも有効だ。というのも、前述のTIPSではチェックボックスのOn/Offを切り替えるたびに、ポストバック処理が発生するため、処理的には無駄が多い。このような場合にも、パラメータ決定の処理を変更イベントからクリック・イベントに移動することで、余計なポストバックの発生を抑えられるというわけだ。![]()
| カテゴリ:Webフォーム 処理対象:検証 使用ライブラリ:CompareValidatorコントロール 関連TIPS:[ASP.NET]検証コントロールで条件付きの検証処理を行うには? |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



