我注意到在System.Web.UI.WebControls命名空间中的大多数(如果不是全部)标准Web控件上,您可以添加所需的任何属性而不会使页面崩溃。
以asp:Button控件为例。
此代码完全有效:
<form runat="server">
<asp:Button runat="server" Text="Test button" crapAttribute="crapValue" />
</form>
现在,我有一个自定义服务器控件,如果我添加任意属性,它会崩溃。它只接受定义了相应公共属性的属性。
我得到的错误是这样的“控件没有名为”crapAttribute“的公共属性。
我希望我的自定义控件能够接受任何属性而不会崩溃。我需要做些什么呢?
我看过Reflector中的标准控件,它们确实有各种属性和东西,但是我看到的并没有立刻吸引我的注意力。
我的自定义控件继承自WebControl的价值。
答案 0 :(得分:4)
您不必特别做任何事情来允许将任意属性添加到控制标记中。从WebControl派生的东西通常会挖掘这些属性并将它们转储到Attributes集合中。
我想不出为什么会失败的原因。如果您有Attributes
,则必须记住在Render
的实现中呈现{{1}}集合。
您可以添加一个简单的新控件代码示例吗?
答案 1 :(得分:0)
这样做的一种方法是在代码隐藏
中添加自定义属性myCustomControl.Attributes.Add("customproperty", "value");
这应该适合你。
但是,我有兴趣了解如何在服务器控件本身中执行此操作。