我正在添加一些控件作为我开发的另一个自定义控件的子控件。这是我添加子控件的位置(自定义标签和通用跨度控件):
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);
}
然后我在父控件的render方法中执行以下操作:
protected override void Render(HtmlTextWriter w)
{
base.Render(w);
foreach (Control c in this.Controls)
{
c.RenderControl(w);
}
if (Required)
{
rfv.RenderControl(w);
}
}
但是我收到错误'具有相同密钥的条目已存在'。这是由手动呈现子控件的尝试引起的。我认为我不需要进行手动渲染,但在我编码之前,控件中没有出现(HTML标记中没有任何内容)。有什么想法正在发生什么?
答案 0 :(得分:-1)
看起来儿童控件的手动渲染不是问题。我重写了代码 因为我最初将子控件分配给父控件的属性,但更改了此操作以将子控件添加到父控件的控件集合中(以便子控件现在经历正确的生命周期)。我之前一直在手动渲染子控件,当它们是父控件的属性时,仍在执行此操作。手动渲染所有子项时,第二次添加控件。仍然没有回答: