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プロパティのようなもの)を格納できます。それは醜い練習と見なされるかもしれませんが、必要な場合はあなたのためにあります。有効/無効の状態をどうするかのヒントとして使用できます。
マイページにはテキストボックスとドロップダウンボックスがあります。 ControlからTextBoxまたはDropdownにダウンキャストするとき、TextBoxまたはドロップダウンにダウンキャストする必要があるかどうかを動的に判断するにはどうすればよいでしょうか? – User1
このメソッドはいつ呼び出されますか?それについて少し混乱しています... – bflemi3
@ bflemi3この質問と回答は3年以上前からのものですが、ユーザーがフォームを送信したときにコードでPage.Validate()を呼び出すパターンがあると思います。 PageValidatorのBaseValidatorsの値が設定され、Page.Validate()の直後にこの種のメソッドを呼び出すことができます。私はそれが動作する方法だと思います...私は約3年間でASP.NETプログラミングをやっていないし、何かがMVCで今異なるかどうかわからない – Rich