2012-01-26 16 views
0

サーバーコントロール内で検証コントロールを使用するにはどうすればよいですか?検証コントロールで使用するためにコードの背後にコントロールのIDを設定する

private TextBox _textbox; 
RequiredFieldValidator _validator; 

protected override void OnInit(object sender, EventArgs e) 
{ 
    _textbox= new TextBox {ID = "test"}; 
    _validator = new RequiredFieldValidator{ControlToValidate = _textbox.ID}; 
} 

protected override void OnLoad(object sender, EventArgs e) 
{ 
    this.Controls.Add(_textbox); 
    this.Controls.Add(_validator); 
} 

はその後、それが正常に動作しますが、私はテキストボックスの後ろにコードでIDを設定しているため、実際の生成されたHTMLでのテストのIDを持っている:私が持っている問題は、私はこのような何かを行う場合は、デフォルトではということです(ctl1_ctl2_testまたは何かの代わりに)。つまり、同じページでコントロールを2回使用すると、エラーが発生します。私はIDを設定しない場合、それはnullであり、バリデータはコントロールを見つけることができません。

すべてのヘルプは素晴らしいことだ、

おかげで、

ジョー

+3

ページ内で同じコントロールを2回使用する理由は何ですか?同じコントロールを2回使用することは、同時に2つの場所にいるようなものです。するな。量子エンタングルメントはまだネットに達していません。新しいコントロールを作成します。 –

+0

私はあなたの質問を理解しているかどうかわかりません。あなたのページでRequiredFieldValidatorを2回(2種類のコントロール用)使用しようとしていますか? – gabsferreira

+0

ページのライフサイクルの後の段階でControlToValidateプロパティを設定しようとしましたか。ロード中か事前レンダリング中か? @サニ:これは、カスタムまたはUserControlと仮定し、このコントロールは、ページ上で複数回使用されます。 –

答えて

0

ちょうどあなたのサーバーコントロールによって実装されたインタフェースのリストにINamingContainerを追加:今すぐ

public class RequiredTextBox : Control, INamingContainer 

IDの子のTextBoxはサーバーコントロールのIDによってスコープされるため、IDの競合が回避されます。

関連する問題