- PR -

asp.net2.0で、validatorによるエラー時にコンポーネントに色を付ける

1
投稿者投稿内容
たつ
常連さん
会議室デビュー日: 2005/11/21
投稿数: 39
投稿日時: 2009-02-10 19:29
validatorでエラーとなったテキストボックスの背景色を赤色にしたいです。

framework1.1ではWebUIValidation.jsを改造して使っていましたが、2.0では実態がなくなり自動生成されるようになったようです。

同じ機能を提供するにはどのようにしたらいいでしょうか。

ご尽力をよろしくお願いします。
たつ
常連さん
会議室デビュー日: 2005/11/21
投稿数: 39
投稿日時: 2009-02-12 09:00
あれ?
ないのでしょうか。。。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-12 10:33
EnableClientScript を false にして
(どうせサーバー側の検証は必須だから)
IsValid が false だったら対象コントロールの
BackColor を変える。
(true だったら戻す)
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-02-12 10:43
無理にでもクライアント側だけで赤くしたいのであれば、

ボタンコントロールのonclientclickなどで自前でPage_ClientValidateやValidatorValidateなどを呼んで確認する。


たつ
常連さん
会議室デビュー日: 2005/11/21
投稿数: 39
投稿日時: 2009-02-12 16:33
Kingさん、デューンさん
返信ありがとうございます。

2.0ではポストバックさせずにエラー項目を赤くするにはそれぞれのボタンに埋め込むしかないということですかね。。。。
Page_ClientValidateを呼んでエラーとなったバリデータの参照コンポーネントを赤にする処理を全ボタンに追加。
結構めんどくさいな・・・

普通エラーになった場所を赤くしようとか考えると思うんですけど、みなさん違う方法で表示しているのでしょうか!?

うちはValidationSummaryにエラーメッセージをまとめて表示して、各validatorは表示をnoneにしてエラーメッセージが出ないようにし、エラーになったテキストボックスやドロップダウンリストの色を赤色にしていました。
各validatorの表示をnoneにしているのは長いメッセージが出るとレイアウトが崩れるからです。

ちょっと質問が変わってしまうかもしれませんが、うちはこうやってエラーになった項目をユーザーに教えてるとかいう方法があれば教えて下さいm(__)m
たつ
常連さん
会議室デビュー日: 2005/11/21
投稿数: 39
投稿日時: 2009-02-13 19:01
あ、なんか必須チェックとかも全てカスタムバリデータでやって、スクリプトにisValidの結果によって色を付ける処理を入れる方向で確定みたいです。
お騒がせいたしました。
たつ
常連さん
会議室デビュー日: 2005/11/21
投稿数: 39
投稿日時: 2009-02-17 15:19
何度も自己レス入れて申し訳ないですが、先輩がどこからかやり方発見してきたので、参考に載せておきます。


scriptファイル


// window の Load イベントを取得する。
window.onload = window_Load;

function window_Load() {
//エラーコントロール色つけのためValidationSummaryOnSubmitをカスタマイズする
var code = ValidationSummaryOnSubmit.toString();
code = code.replace("ValidationSummaryOnSubmit","");
code = code.replace(
'if (!Page_Validators[i].isvalid && typeof(Page_Validators[i].errormessage) == "string") {',
'if (!Page_Validators[i].isvalid && typeof(Page_Validators[i].errormessage) == "string") {' +
'setBackColorOfInvalidControl(Page_Validators[i].controltovalidate);');
code = code.replace(
'var summary, sums, s;',
'var summary, sums, s;' +
'resetBackColorOfAllControlToValidate();resetBackColorOfAllElements();');
eval("ValidationSummaryOnSubmit = " + code);

return true;
}


ValidationSummaryOnSubmitのテキストをいじくって色を付けるscriptを実行させるように置換し、evalで反映させています。

先に書きました全てカスタムバリデータでやる方法は、カーソルが外れただけで色が付いてしまうので、こちらの方法を採用することにしました。
1

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