私が開発した別のカスタム コントロールの子コントロールとして、いくつかのコントロールを追加しています。子コントロール (カスタム ラベルと汎用スパン コントロール) を追加する場所は次のとおりです。
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 マークアップには何も表示されません)。何が起こっているのですか?