为什么在重写属性时,自定义CompositeControl的Enabled属性仍设置为disabled =“disabled”?

时间:2011-07-18 16:33:31

标签: c# asp.net-3.5 custom-server-controls

我创建了一个继承自CompositeControl的自定义服务器控件。在CreateChildControls方法中,我向控件树添加了一个输入和一个标签控件(还有其他控件)。我已经覆盖了Enabled属性,因此我只获取/设置输入的Enabled属性,而不是复合控件的Enabled属性。在我使用此服务器控件的用户控件中,我将Enabled="false"添加到标记中。但是,无论我做什么,容器div都会添加disabled="disabled"属性(部分子项也是如此)。

当然,除了IE 6之外,这似乎在所有浏览器中都能正常工作。如果禁用控件内有字段集图例或单选按钮列表,则文本消失。我原本试图看看是否有一些缺陷需要通过CSS修复IE 6.然后,我注意到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" />

1 个答案:

答案 0 :(得分:0)

我通过创建一个“new”Enabled属性而不是覆盖来解决这个问题。

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

我不会接受这个答案,除非我得到其他人的投票,以证明我的发现需要这样做。