2009-11-03 39 views
5

我注意到,在System.Web.UI.WebControls命名空间中的大多数(如果不是全部的话)标准Web控件上,您可以添加任何您想要的属性而不会崩溃这一页。允许在服务器/ usercontrol上的任何属性/属性

以asp:Button控件为例。

此代码是完全合法:

<form runat="server"> 
    <asp:Button runat="server" Text="Test button" crapAttribute="crapValue" /> 
</form> 

现在,我已经有了,如果我添加任意属性,它出故障的自定义服务器控件。它只接受定义了相应公共属性的属性。

我得到的错误是这样的“该控件没有名为”crapAttribute“的公共属性”。

我想我的自定义控件接受任何属性而不会崩溃。我需要做些什么才能工作?

我已经看过Reflector中的标准控件,它们具有各种属性和东西,但是我没有看到立即引起我注意的东西。

我的自定义控件继承自WebControl的价值。

回答

4

您不必特别做任何事情来允许任意属性添加控件标记。从WebControl派生的东西通常会挖掘这些属性并将它们转储到属性集合中。

我想不出为什么会失败。如果有的话,您必须记得在执行Render时将Attributes集合呈现。

您可以添加一个简单的新控件的代码示例,但不能解决您的问题吗?

+1

现在我觉得自己像个驴子:-) 我意识到我实际上是从“Control”继承而不是“WebControl”。我们曾经从“WebControl”继承,但由于某种原因它刚刚改为“Control”。 我相信如果我刚开始继承“WebControl”,这个问题就会不复存在。 – HaukurHaf

0

一个这样做是添加自定义属性在后面的代码

myCustomControl.Attributes.Add("customproperty", "value"); 

这应该为你做的工作方式。

但是,我有兴趣知道如何在服务器控件本身做到这一点。