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);
        }

次に、親コントロールの 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 マークアップには何も表示されません)。何が起こっているのですか?

4

1 に答える 1

-1

子コントロールの手動レンダリングは問題ではなかったようです。もともと子コントロールを親コントロールのプロパティに割り当てていたので、コードを作り直しましたが、これを変更して、子コントロールを親コントロールのコントロールコレクションに追加しました(子コントロールが正しいライフサイクルを通過するようになりました) )。以前は、子コントロールが親コントロールのプロパティであるときに手動でレンダリングしていましたが、それでもこれを実行していました。すべての子を手動でレンダリングすると、コントロールが2回追加されていました。それでも答えません:

  • 自動である必要があるのに、なぜ手動で追加する必要があるのですか?
于 2012-11-21T01:36:55.153 に答える