【问题标题】:How to duplicate a control in codeBehind C#如何在 codeBehind C# 中复制控件
【发布时间】:2014-04-25 22:11:21
【问题描述】:

我想在 asp.net 代码隐藏中复制一个控件。

在我的代码中:

HtmlGenericControl divRowHeader = new HtmlGenericControl("div");
divRowHeader.Style.Add(HtmlTextWriterStyle.Width, "323px");
divRowHeader.Style.Add(HtmlTextWriterStyle.MarginTop, "2px");
divRowHeader.Style.Add(HtmlTextWriterStyle.MarginLeft, "45px");
divRowHeader.Style.Add(HtmlTextWriterStyle.Height, "30px");
divRowHeader.Style.Add("border-top", "solid 3px lightgray");
divRowHeader.Style.Add("border-bottom", "solid 3px lightgray");
divRowHeader.Style.Add("border-right", "solid 3px lightgray");
divRowHeader.Style.Add("border-left", "solid 3px lightgray");

divTabRessources.Controls.Add(divRowHeader);
divTabInterim.Controls.Add(divRowHeader);

我想将相同的控件添加到 2 个不同的 div,但现在它只是移动控件。是否有一个函数可以复制一个控件并为其赋予另一个唯一 ID,从而避免冲突?

【问题讨论】:

  • 了解如何在 C# 中编写方法。在方法中分解 div 的创建。
  • 这个问题以前有人问过并回答过。见stackoverflow.com/questions/161474/…
  • 这是向页面添加 HTML 的一种非常丑陋的方式……在这种情况下,使用隐藏代码没有任何优势,您可以简单地将其放在您的 aspx/ascx 页面中……如果可能的话,不要内联 JS。
  • 分解,他的意思是把你的代码中可以重用的部分,创建一个你可以调用的函数。该函数可以返回一个HTMLGenericControl。您需要做的就是修改 ID 并将其添加到 div 中,您就可以开始了。
  • @mason 是对的,检查它的答案。这就是我的意思

标签: c# asp.net


【解决方案1】:

如果您正在寻找执行此操作的 C# 方法,请查看 WebControl.MemberwiseClone() 方法。这是此方法的docs

不过,我的建议是尝试使用Repeater 控件。这是此控件的docs

【讨论】:

    【解决方案2】:

    回答您关于如何“分解”的问题。您只需从尝试重用的代码创建一个方法。 Visual Studio 在简化方面做得很好。它基本上可以为您完成大部分工作。突出显示要移动到方法中的代码,右键单击它,然后转到 Refactor,然后是 Extract Method。给它一个名字,它会为你创建一个函数。进行调整,一切顺利。以下是完整版本的外观:

    protected HtmlGenericControl CreateDivRowHeader(string id)
    {
        HtmlGenericControl divRowHeader = new HtmlGenericControl("div");
        divRowHeader.Style.Add(HtmlTextWriterStyle.Width, "323px");
        divRowHeader.Style.Add(HtmlTextWriterStyle.MarginTop, "2px");
        divRowHeader.Style.Add(HtmlTextWriterStyle.MarginLeft, "45px");
        divRowHeader.Style.Add(HtmlTextWriterStyle.Height, "30px");
        divRowHeader.Style.Add("border-top", "solid 3px lightgray");
        divRowHeader.Style.Add("border-bottom", "solid 3px lightgray");
        divRowHeader.Style.Add("border-right", "solid 3px lightgray");
        divRowHeader.Style.Add("border-left", "solid 3px lightgray");
        divRowHeader.ID=id;
        return divRowHeader;
    }
    
    //now you can reuse the code
    divTabRessources.Controls.Add(CreateDivRowHeader("control1"));
    divTabInterim.Controls.Add(CreateDivRowHeader("control2"));
    

    【讨论】:

    • 我认为不需要指定 ID。如果您不这样做,.Net 将分配一个通用 Id (ctl0, ctl1, ...)
    猜你喜欢
    • 1970-01-01
    • 2012-04-22
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多