TextBox、Label、Panel。。。均继承自CCD_ 1。
有没有办法从Control
继承并使ASP.NET控件从我的新控件继承?
例如,我有一个控制
public class SpecialControl : Control
{
public string Something { get; set; }
}
现在我希望所有控件都继承自它,所以
<asp:TextBox ID="tb" runat="server" Something="hello" />
将是有效的。
您不能更改作为BCL一部分的控件的继承链。
您可以做的一件事是创建一个扩展方法,如下所示。
<asp:TextBox id="tst" runat="server" Something="TestValue"></asp:TextBox>
public static string GetSomething(this WebControl value)
{
return value.Attributes["Something"].ToString();
}
我只对TextBox
对照进行了测试。可能不是理想的解决方案,因为它不是强类型的,但会起作用。
正如Oded所提到的,您不能修改打包控件的继承链。
您可以为打包的控件创建包装器,并在包装器中实现自定义属性和方法。以下是如何扩展TextBox的一个简单示例:
[DefaultProperty("Text")]
[ToolboxData("<{0}:CustomTextBox runat=server></{0}:CustomTextBox>")]
public class CustomTextBox: System.Web.UI.WebControls.TextBox
{
[Bindable(true)]
[DefaultValue("")]
public string Something
{
get
{
string something = (string)ViewState["Something"];
return (something == null) ? String.Empty : something ;
}
set
{
ViewState["Something"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}