如何修改所有ASP.NET控件以继承我的特殊控件



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);
    }
}

最新更新