【问题标题】:How do you 'clone' WebControls in C# .NET?如何在 C# .NET 中“克隆”WebControl?
【发布时间】:2008-10-02 09:17:57
【问题描述】:

我的基本问题是,在 .NET 中,我如何克隆 WebControls?

我想构建一个自定义标记,它可以生成其子项的多个副本。 最终我打算构建一个类似于 JSP/Struts 中的标签。

但我遇到的第一个障碍是复制/克隆控件内容的能力。

考虑一下这个相当人为的例子;

<custom:duplicate count="2">
    <div>
        <p>Some html</p>
        <asp:TextBox id="tb1" runat="server" />
    </div>
</custom:duplicate>

输出的 HTML 标记类似于,

<div>
    <p>Some html</p>
    <input type="text" id="tb1" />
</div>
<div>
    <p>Some html</p>
    <input type="text" id="tb1" />
</div>

注意:我知道我的 id 重复了,我稍后会想出一个解决方案!

所以我们将拥有我的自定义控件,其中包含 3 个孩子(我认为)——一个文字控件、一个 TextBox 控件和另一个文字控件。

在这个例子中,我说的是“count=2”,所以控件应该做的是输出/渲染它的子元素两次。

我希望做的是编写一些“OnInit”代码,它执行以下操作:

List<WebControl> clones;
for(int i=1; i<count; i++)
{
    foreach(WebControl c in Controls) 
    {
        WebControl clone = c.Clone();
        clones.Add(clone);
    }
}

Controls.AddRange(clones);

但是,据我所知,WebControls 没有实现 ICloneable,因此无法以这种方式克隆它们。

知道如何克隆 WebControls 吗?

【问题讨论】:

    标签: c# .net asp.net


    【解决方案1】:

    使用中继器和绑定无用数据源有什么问题。它将复制模板化控件并处理 ID 创建和所有操作。

    【讨论】:

      【解决方案2】:

      作为真正想要克隆自定义服务器控件的其他人的参考。

      public class MyCustomServerCtrl
      {
      
         ...
      
         public MyCustomServerCtrl Clone()
         {
            return MemberwiseClone() as MyCustomServerCtrl;
         }
      
      }
      

      但请注意:这很少需要,如果需要,很可能只是在您有一些非常具体的逻辑时。应尽可能避免。一般来说,使用现有的控件(如 Repeater、ListView 等)就足够了。

      【讨论】:

      • 我有一个真正的用途,所以我很高兴你出于文档目的发布了这个。只用了 7 年,那个人就找到了它! :)
      【解决方案3】:

      在 ASP.NET 中执行此操作的方法是使用模板。 MSDN 中有这方面的示例,只需查找模板化控件/ITemplate。

      【讨论】:

        【解决方案4】:

        WebControl.CopyBaseAttributes 方法将 AccessKey、Enabled、ToolTip、TabIndex 和 Attributes 属性从指定的 Web 服务器控件复制到调用此方法的 Web 服务器控件。

        MSDN Documentation

        【讨论】:

          猜你喜欢
          • 2011-01-17
          • 2011-10-12
          • 1970-01-01
          • 2011-07-10
          • 2011-05-15
          • 1970-01-01
          • 1970-01-01
          • 2011-05-03
          • 1970-01-01
          相关资源
          最近更新 更多