Почему свойство Enabled пользовательского CompositeControl все еще имеет значение disabled = "disabled", когда свойство переопределяется? - PullRequest
0 голосов
/ 18 июля 2011

Я создал собственный серверный элемент управления, который наследуется от 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 голосов
/ 19 июля 2011

Я решил эту проблему, создав «новое» свойство Enabled вместо переопределения.

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

Я не приму этот ответ, если не получу отклики от других, подтверждающих мой вывод о необходимостисделай это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...