【问题标题】: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 继承来的。

【问题讨论】:

    标签: asp.net properties user-controls servercontrol


    【解决方案1】:

    您无需特别执行任何操作即可将任意属性添加到控件标记中。从 WebControl 派生的东西通常会收集这些属性并将它们转储到 Attributes 集合中。

    我想不出为什么会失败。如果你有 Render 的实现,你必须记住在你的实现中渲染 Attributes 集合。

    您能否添加一个新控件代码的简单示例,该示例无法解决您的问题?

    【讨论】:

    • 现在我感觉自己像一头驴 :-) 我意识到我实际上是从“Control”而不是“WebControl”继承的。我们曾经继承自“WebControl”,但由于某种原因,它不久前被更改为“Control”。我相信如果我只是开始从“WebControl”继承,这个问题将不复存在。
    【解决方案2】:

    一种方法是在后面的代码中添加自定义属性

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

    这应该可以为您完成这项工作。

    但是,我有兴趣知道如何在服务器控件本身中执行此操作。

    【讨论】:

      猜你喜欢
      • 2010-09-05
      • 2020-01-04
      • 1970-01-01
      • 2021-07-30
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多