0

我正在添加几个控件作为我开发的另一个自定义控件的子控件。这是我添加子控件(自定义标签和通用跨度控件)的位置:

    public static void AddLabel(this IExtendedControl control, string inheritableCssClass = "")
    {
        TestCLabel contentLabel = new TestCLabel();
        contentLabel.Text = control.LabelText;
        control.Controls.Add(contentLabel);
        if (control.Required)
        {
            HtmlGenericControl requiredFieldIndicator = new HtmlGenericControl("span");
            requiredFieldIndicator.Attributes["class"] = "requiredFieldIndicator";
            requiredFieldIndicator.InnerText = " *";
            control.Controls.Add(requiredFieldIndicator);
        }

然后我在父控件的渲染方法中执行以下操作:

    protected override void Render(HtmlTextWriter w)
    {
        base.Render(w);

        foreach (Control c in this.Controls)
        {
            c.RenderControl(w);
        }

        if (Required)
        {
            rfv.RenderControl(w);
        }
    }

但我收到错误“已存在具有相同密钥的条目”。这是由尝试手动呈现子控件引起的。我认为我不需要进行手动渲染,但在我在控件中编码之前没有出现(HTML 标记中没有出现任何内容)。有什么想法吗?

4

1 回答 1

-1

看起来子控件的手动渲染不是问题。我重新编写了代码,因为我最初将子控件分配给父控件的属性,但更改了它以将子控件添加到父控件的控件集合中(以便子控件现在经历正确的生命周期)。当子控件是父控件的属性并且仍在执行此操作时,我以前一直在手动渲染子控件。手动渲染所有子项时,控件被第二次添加。还是没有回答:

  • 为什么需要手动添加,因为这应该是自动的?
于 2012-11-21T01:36:55.153 回答