TextBox,Label,Panel,...都继承自Control
。
有没有办法从Control
继承并使ASP.NET控件继承自我的新控件?
例如,我有一个控件
public class SpecialControl : Control
{
public string Something { get; set; }
}
现在我希望所有控件都从它继承,所以
<asp:TextBox ID="tb" runat="server" Something="hello" />
有效。
答案 0 :(得分:5)
您无法更改属于BCL的控件的继承链。
答案 1 :(得分:2)
您可以做的一件事是创建一个扩展方法,如下所示。
<asp:TextBox id="tst" runat="server" Something="TestValue"></asp:TextBox>
public static string GetSomething(this WebControl value)
{
return value.Attributes["Something"].ToString();
}
我只对TextBox
控件进行了测试。可能不是理想的解决方案,因为它不是强类型的,但会起作用。
答案 2 :(得分:0)
正如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);
}
}