允许服务器/用户控件上的任何属性/属性
Posted
技术标签:
【中文标题】允许服务器/用户控件上的任何属性/属性【英文标题】:Allowing any property/attribute on a server/usercontrol 【发布时间】:2010-12-12 16:43:33 【问题描述】:我注意到,在 System.Web.UI.WebControls 命名空间中的大多数(如果不是全部)标准 Web 控件上,您可以向它们添加所需的任何属性,而不会导致页面崩溃。
以asp:Button控件为例。
这段代码完全有效:
<form runat="server">
<asp:Button runat="server" Text="Test button" crapAttribute="crapValue" />
</form>
现在,我有一个自定义服务器控件,如果我向它添加任意属性,它就会崩溃。它只接受定义了相应公共属性的属性。
我得到的错误是这样的“控件没有名为“crapAttribute”的公共属性。
我希望我的自定义控件能够接受任何属性而不会崩溃。我需要做什么才能让它发挥作用?
我查看了 Reflector 中的标准控件,它们确实具有各种属性和东西,但我没有看到任何东西立即引起我的注意。
我的自定义控件是从 WebControl 继承来的。
【问题讨论】:
【参考方案1】:您无需特别执行任何操作即可将任意属性添加到控件标记中。从 WebControl 派生的东西通常会收集这些属性并将它们转储到 Attributes 集合中。
我想不出为什么会失败。如果你有 Render
的实现,你必须记住在你的实现中渲染 Attributes
集合。
您能否添加一个新控件代码的简单示例,该示例无法解决您的问题?
【讨论】:
现在我感觉自己像一头驴 :-) 我意识到我实际上是从“Control”而不是“WebControl”继承的。我们曾经继承自“WebControl”,但由于某种原因,它不久前被更改为“Control”。我相信如果我只是开始从“WebControl”继承,这个问题将不复存在。【参考方案2】:一种方法是在后面的代码中添加自定义属性
myCustomControl.Attributes.Add("customproperty", "value");
这应该可以为您完成这项工作。
但是,我有兴趣知道如何在服务器控件本身中执行此操作。
【讨论】:
以上是关于允许服务器/用户控件上的任何属性/属性的主要内容,如果未能解决你的问题,请参考以下文章