2011-10-07 56 views
2

TextBox,Label,Panel,...都从Control继承。如何修改所有ASP.NET控件从我的特殊控件继承?

有没有办法从Control继承并使ASP.NET控件继承我的新控件?

例如,我有一个控制

public class SpecialControl : Control 
{ 
    public string Something { get; set; } 
} 

现在我希望所有的控件来继承它,所以

<asp:TextBox ID="tb" runat="server" Something="hello" /> 

将是有效的。

+0

尝试更新web.config通过为tagPrefix =“asp”提供其他程序集关联来控制该部分,但是我不确定它是否会更新类后面的代码以及是否需要源代码为 – sll

回答

5

您不能更改属于BCL一部分的控件的继承链。

+0

实际的控制,改变继承,并重新编译。但据我所知,内置控件的源代码不公开/可用。 –

0

正如Oded所述,您不能修改打包控件的继承链。

你可以做的是为打包控件创建包装,并在包装​​中实现自定义属性和方法。下面是如何扩展文本框一个简单的例子:

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

一件事你可以做的是下面创建一个扩展方法。

<asp:TextBox id="tst" runat="server" Something="TestValue"></asp:TextBox> 

public static string GetSomething(this WebControl value) 
{ 
    return value.Attributes["Something"].ToString(); 
} 

我只测试了一个TextBox控件。可能不是理想的解决方案,因为它不是强类型的,但会起作用。

+0

这不是我所需要的,但实际上非常有趣。 +1 – BrunoLM