我创建了一个继承自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" />
答案 0 :(得分:0)
我通过创建一个“new”Enabled属性而不是覆盖来解决这个问题。
public new bool Enabled
{
get { return _textBox.Enabled; }
set { _textBox.Enabled = value; }
}
我不会接受这个答案,除非我得到其他人的投票,以证明我的发现需要这样做。