2011-07-18 4 views
0

私はCompositeControlから継承するカスタムサーバーコントロールを作成しました。 CreateChildControlsメソッドでは、コントロールツリーに入力とラベルコントロール(他にもある)が追加されています。 Enabledプロパティをオーバーライドして、コンポジットコントロールのEnabledプロパティではなく、入力のEnabledプロパティのみを取得または設定するようにしました。このサーバーコントロールを使用するユーザーコントロールでは、Enabled="false"をマークアップに追加します。しかし、私が何をしても、コンテナdivにはdisabled="disabled"という属性が追加されます(子供の一部も同様です)。プロパティがオーバーライドされても、カスタムCompositeControlのEnabledプロパティがdisabled = disabledに設定されているのはなぜですか?

もちろん、これはIE 6を除くすべてのブラウザで正常に機能しているようです。フィールドセットの凡例または無効なコントロール内のラジオボタンリストがある場合、テキストは消えます。私はもともと、IE 6用にCSS経由で修正する欠陥があるかどうかを確認しようとしていました。そして、私はその属性を持っているとは思わなかったタグについてdisabled="disabled"に気付きました。

私は正確にここで間違っていますか?挙動を示す

サンプルコントロール:

public class TextBoxWithLabel : CompositeControl 
{ 
    private readonly Label _label = new Label(); 
    private readonly TextBox _textBox = new TextBox(); 

    protected override HtmlTextWriterTag TagKey 
    { 
     get { return HtmlTextWriterTag.Div; } 
    } 

    public string LabelText 
    { 
     get { return _label.Text; } 
     set { _label.Text = value; } 
    } 

    public override bool Enabled 
    { 
     get { return _textBox.Enabled; } 
     set { _textBox.Enabled = value; } 
    } 

    protected override void CreateChildControls() 
    { 
     _label.ID = ID + "_label"; 
     _textBox.ID = ID + "_field"; 
     _label.AssociatedControlID = _label.ID; 

     Controls.Add(_label); 
     Controls.Add(_textBox); 
    } 
} 

は使用方法:

<test:TextBoxWithLabel id="tester" runat="server" LabelText="My TextBox" Enabled="false" /> 

答えて

0

私は "新しい" Enabledプロパティを作成する代わりにオーバーライドすることによってこれを解決してきました。

public new bool Enabled 
{ 
    get { return _textBox.Enabled; } 
    set { _textBox.Enabled = value; } 
} 

私はこれを行う必要のための私の調査結果を検証する他者からのアップ票を取得しない限り、私はこの答えを受け入れることはありません。

+0

これは意味があります。プロパティ自体はおそらくCompositeControlでは何もしません。代わりに、Renderメソッド(またはそのようなもの、私はソースを読んでいない)で読み取られます。新しいプロパティを作成することによって((CompositeControl)this).Enabledは引き続きtrueと読み取られます。 –

+0

これはCompositeControlの書き方に固有のものですか?私はコントロールをゼロから作成し、レンダリングメソッドを使用した場合、この動作が見られないと考えています。私は、フレームワークコードを見つけ出す必要があります。 – Sumo

関連する問題