2009-03-20 15 views
2

のは、一例として以下のような簡単なサイトを見てみましょう:ASP.NET:検証に失敗したコントロールの背景色を変更するには?

<asp:TextBox id="TextBox1" 
runat="server"></asp:TextBox> 
&nbsp; 
<asp:RequiredFieldValidator 
id="RequiredFieldValidator1" runat="server" 
ErrorMessage="Required!" 
ControlToValidate="TextBox1"> 
</asp:RequiredFieldValidator> 

、私は検証が失敗したこれまでのときTextBox1が黄色にそのBackColorを変更したいと思います。これを達成する簡単な方法はありますか?

答えて

5

Page.ValidatorsはValidatorCollectionです。このコレクションを反復して、各メンバーをBaseValidatorにキャストすることができます。 BaseValidator.IsValidをチェックし、BaseValidator.ControlToValidateからコントロールの名前を取得します。 this.FindControl(コントロール名)を使用してコントロールへの参照を取得します(これはControlオブジェクトを返します)。必要な型チェックとキャストを実行し、TextBoxまたはBackColorプロパティを含む他のコントロールにコントロールをキャストできる場合は、キャストしてBackColorを設定します。あなたがしている場合、またなど、あなたが異なっ異なる制御タイプを処理することもできますので、私は型チェックのもののためのコードが含まれていなかった理由は

private void setInvalidControlsBackColor() 
    { 
     Control c; 
     TextBox t; 
     foreach (BaseValidator v in Page.Validators) 
     { 
      if (!v.IsValid) 
      { 
       c = (Control)this.FindControl(v.ControlToValidate); 
       // check the type, make sure you can cast this... 
       t = (TextBox)c; 
       t.BackColor = Color.Yellow; 
       // or however else you want to handle this... 
      } 
     } 
    } 

はここ簡易版ですバリデーターのToolTipフィールドを使用しない場合は、このフィールドを使用して追加情報(Tagプロパティのようなもの)を格納できます。それは醜い練習と見なされるかもしれませんが、必要な場合はあなたのためにあります。有効/無効の状態をどうするかのヒントとして使用できます。

+0

マイページにはテキストボックスとドロップダウンボックスがあります。 ControlからTextBoxまたはDropdownにダウンキャストするとき、TextBoxまたはドロップダウンにダウンキャストする必要があるかどうかを動的に判断するにはどうすればよいでしょうか? – User1

+0

このメソッドはいつ呼び出されますか?それについて少し混乱しています... – bflemi3

+1

@ bflemi3この質問と回答は3年以上前からのものですが、ユーザーがフォームを送信したときにコードでPage.Validate()を呼び出すパターンがあると思います。 PageValidatorのBaseValidatorsの値が設定され、Page.Validate()の直後にこの種のメソッドを呼び出すことができます。私はそれが動作する方法だと思います...私は約3年間でASP.NETプログラミングをやっていないし、何かがMVCで今異なるかどうかわからない – Rich

1

より良いオプションは、システムバリデータから継承し、独自のバリデータを作成することです。既定の動作をオーバーライドして、ControlToValidateフィールドの背景色を変更することができます。ほとんどのコントロールでは、タイプをチェックする必要はありません。スタイル値を "background-color:yellow"に設定するだけです。

+0

私はそれのtoughtを持っていたが、いくつかの代替ソリューションがありました。 – vipirtti

関連する問題