- PR -

ASP.NET 複数のButtonで別々の入力必須の検証を行わせるには?

1
投稿者投稿内容
ぶw
常連さん
会議室デビュー日: 2003/01/24
投稿数: 20
投稿日時: 2005-01-11 16:13
お世話になります。

ページにTextBox1、TextBox2、Button1、Button2とあります。

Button1クリック時には、TextBox1に入力されているかどうか
Button2クリック時には、TextBox2に入力されているかどうか

をチェックしたいと思い、RequiredFieldValidatorを使用してみました。
しかしどちらのButtonをクリックしても、両方のTextBoxを検証してしまいます。
RequiredFieldValidatorではこのようなことを行うのは無理なのでしょうか?
(無理であれば、検証するスクリプトを自前で書こうと思っております・・・)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-01-11 21:43
 はい、無理です。スクリプトを自前で用意してください。
 とはいっても、Validatorコントロールそのもは使えます。有効/無効のプロパティを切り替えれば良かったような?

 ちなみに、私はページをロードしたときに検証したいコントロールがわかっているので、検証するコントロール配列への登録を行うようなスクリプトを書きました。
# クライアント検証の話し

_________________
ぶw
常連さん
会議室デビュー日: 2003/01/24
投稿数: 20
投稿日時: 2005-01-12 16:09
ありがとうございます。
はっきり無理だとわかってすっきりしました。
単なる入力必須チェックなので、ボタンのonklickにスクリプトを書いて対応しました。

その後、ASP.NETが吐き出すHTMLとスクリプトを調べ、そのままでは無理だと言うことに納得できました。
スクリプトの関数がないなぁと思ってたらファイル(WebUIValidation.js)になってたのね><
それを見て検証のカラクリがわかりました(ような気がしました)。

Jittaさんのおっしゃる「検証するコントロール配列」というのは、
WebUIValidation.jsの中のPage_Validatorsを指すのかな?
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-01-14 05:55
引用:

ぶwさんの書き込み (2005-01-12 16:09) より:
ありがとうございます。
はっきり無理だとわかってすっきりしました。


http://www.atmarkit.co.jp/fdotnet/dotnettips/251aspdisablevalid/aspdisablevalid.html
に解決方法が掲載されています。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
ぶw
常連さん
会議室デビュー日: 2003/01/24
投稿数: 20
投稿日時: 2005-01-18 19:13
情報ありがとうございます。
上記のリンクでの解決方法ですと、ボタンクリックでポストバックが発生した後にサーバーサイドで検証コントロールの有効、無効を切り替えていますね。

私は、ポストバックが発生することなくクライアントサイドでの検証をしたかったもので、
上記方法は採用できませんでした。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-01-18 21:27
引用:

ぶwさんの書き込み(2005-01-12 16:09)より:

Jittaさんのおっしゃる「検証するコントロール配列」というのは、
WebUIValidation.jsの中のPage_Validatorsを指すのかな?


 すみません、ソースをよく見ると、

・StartupScriptへ、すべての検証コントロールのenabledをfalseにするスクリプト吐き出し
・各ボタンのonclickに、検証対象のみenabledをtrueにする関数を呼び出す
 (この関数に吐き出すコントロールを配列で保持)
・enabledをtrueにしたら、Page_ClientValidate関数を呼び出す
 (この関数は検証コントロールがあると追加される)

と言うことをやっていました。
 サーバ側でページを処理しているときは、検証コントロールが有効なのでPage_ClientValidate関数が追加されます。それをクライアント上ですべての検証コントロールを無効にすることで、この関数がコールされてもすべての検証は行われません。これでは困るので、ボタンによって必要な検証コントロールのみ有効にします。

_________________
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-01-19 08:52
マイクロソフトは、この問題を認識していたようです。

ASP.NET 2.0では、検証コントロールにValidationGroup属性を追加することにより
解決しています。

http://www.atmarkit.co.jp/fdotnet/asp2review/asp2review06/asp2review06_01.html

_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
ぶw
常連さん
会議室デビュー日: 2003/01/24
投稿数: 20
投稿日時: 2005-01-25 11:46
Jittaさん、Accessさん、ありがとうございます。

Jittaさんの方法はクライアント側で検証できるような気がするので、今後機会があったら後挑戦してみます。

ASP.NET 2.0で万事解決するのですね。
最初から入れといてくれ>まいくろしょふと
1

スキルアップ/キャリアアップ(JOB@IT)