- - PR -
エラーチェック(Validator)について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-01-16 21:18
いつもお世話になっております。
いつも、こちらで、勉強させて頂いています。 1. 同一の画面上で異なるエラーチェック(Validator)を行いたいと思います。 ボタンを2つ設置します(仮にボタンA・ボタンBとします。) テキストボックスを2つ設置します。(仮にテキストA・テキストBとします。) ボタンAは、テキストAは入力チェックし、テキストBは入力チェックしません。 ボタンBは、テキストAは入力チェックせず、テキストBは入力チェックします。 このような処理は、可能でしょうか 2. DATAGRIDとボタンを設置します。 DATAGRIDに表示レコードが存在しない状態で、 ボタンをクリックした場合、エラーチェック(Validator)を 使用したチェックは可能でしょうか ちなみに、開発環境は、Win2kSrvとvs.net2003です。 いろいろな方法で調査しましたが、 有力な情報が得られませんでした。 初投稿になりますが、 皆様、ご教授の程、よろしくお願いします。 | ||||
|
投稿日時: 2004-01-16 21:22
Windowsアプリケーションですか?Webアプリケーションですか?
Webアプリケーションで、お望みのような処理をしています。 | ||||
|
投稿日時: 2004-01-17 10:05
WEBアプリケーションです。
お手数ですが、ご教授の程、お願いします。 | ||||
|
投稿日時: 2004-01-17 11:34
色々なパターンがありますので、一概には言えませんが・・・。
さて、まず2ですが、 >DATAGRIDとボタンを設置します。 >DATAGRIDに表示レコードが存在しない状態で、 >ボタンをクリックした場合、エラーチェック(Validator)を >使用したチェックは可能でしょうか このチェックの具体的な内容がよく見えませんが、 あくまでも一般論で普通の作り方としては ☆DATAGRIDを使う場合、サーバサイドで生成しているので、 データの有無はその時点でわかっているのが普通。 ☆となれば、WebだとかStandAloneアプリだとかの次元を 超えて、一般的なユーザーインターフェイスとしては、 そのボタンが押されてから、検証するのではなく ・ボタンそのものを表示しない(Invisible) ・ボタンをグレー表示してUnable化 すべきではないでしょうか。 ☆Web,C#だとすると、このボタンのスタイルを objButton.Styles.Add("background-color","gray"); として、(綴りはうろ覚えなので確かめてね。) かつ、 objButton.Attributes.Add("onclick","javascript:return false;"); としておけばよいのではないでしょうか。 1はA,B用にそれぞれValidatorを配するなどの方法があります。 Check内容がデータ型のチェックなのか、 必須入力の空入力防止なのかは不明ですが、 仮に前者だとするとこんな感じのコードを作ったことがあります。 必須入力から入力防止なら、RequiredValidatorに変えればよいです。 /// <param name="checktargetid">検証対象コントロールのID</param> /// <param name="validatorid">このValidatorに付与するID</param> /// <param name="checktype">データ型の定義</param> /// <param name="cssname">CSSクラス(spanタグのクラスを使用してください。)</param> /// <returns>Panelコントロール</returns> public static Panel CreateTextBoxValidatorWithCSS ( string checktargetid , string validatorid , ValidationDataType checktype , string cssname) { Panel panel = new Panel(); panel.ID = validatorid + "|panel"; CompareValidator compValid = new CompareValidator(); // 検証先のテキストボックスを設定します。 compValid.ControlToValidate = checktargetid; compValid.Display = ValidatorDisplay.Static; compValid.Operator = ValidationCompareOperator.DataTypeCheck; compValid.ID = validatorid ; compValid.Type = checktype; compValid.CssClass = cssname; string template = "入力された値は{0}ではありません。"; string param = null; switch ( checktype) { case ValidationDataType.Currency: param = "通貨"; break; case ValidationDataType.Date: param = "日付"; break; case ValidationDataType.Double: param = "数字"; break; case ValidationDataType.Integer: param = "整数値"; break; case ValidationDataType.String: param = "文字"; break; default: break; } compValid.ErrorMessage = String.Format( template , param ); panel.Controls.Add( compValid ); return panel; } | ||||
|
投稿日時: 2004-01-17 13:22
入力検証コントロールは、1つにつき1つのコントロールに対してしか検証(した結果を表示)できません。ですから、テキストA用の検証コントロール、テキストB用の検証コントロールを置きます。 つぎに、このままですとボタンAでもボタンBでも、どちらでも必ず検証A、検証Bが行われます。が、まずはこのまま実行し、HTMLソースを確認してください。onclick属性に追加されているスクリプトをコピーしておきます。 その次に、aspxファイルにスクリプトを追加します。こんな感じかな? <script> function btnAClick() { // ここで検証Aをenableにする // ここにonclickに追加されていたスクリプトをコピー } function btnBClick() { // ここで検証Bをenableにする // ここにonclickに追加されていたスクリプトをコピー } </script> そして、ボタンの検証を引き起こすプロパティをfalseにセットします。 最後に、page.loadイベントハンドラなどで、ボタンコントロールのonclick属性に先ほどの関数をコールするようにします。 [追加] コード中に「検証Aをenableにする」と書いているとおり、検証A,Bはdisable状態にしておきます。 また、クライアントスクリプトを使用することを前提にしています。 [ メッセージ編集済み 編集者: Jitta 編集日時 2004-01-19 08:16 ] | ||||
|
投稿日時: 2004-01-19 09:02
platiniさん・Jittaさん、
返答ありがとうございます。 早速、テストプログラムを作成してみます。 | ||||
|
投稿日時: 2004-01-19 15:59
こんにちは
もしサーバ側で処理するのであれば以下の方法で実現できると思います。 ValidatorコントロールをValidatorEditA、ValidatorEditBとします。 ValidatorコントロールのEnableClientScriptをFalseにします。 これでサーバ側でエラーチェックをするようになります。 ボタンA、BのCausesVaildationプロパティをFalseに設定します。 これでボタンを押した場合、エラーチェックしなくなります。 この状態でそれぞれのボタンのクリックイベントでエラーチェックを行います。 OnButtonAClick() { ValidatorEditA.Validate(); if( ValidatorEditA.IsValid == false ) return; // OnClick時の処理 } OnButtonBClick() { ValidatorEditB.Validate(); if( ValidatorEditB.IsValid == false ) return; // OnClick時の処理 } [ メッセージ編集済み 編集者: ゆうじゅん 編集日時 2004-01-19 17:11 ] | ||||
|
投稿日時: 2004-01-20 13:36
具体的なソースをありがとうございます。
実際に動作するようになりました。 |
1