2012-11-21 90 views
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標記中沒有出現任何內容)。任何想法發生了什麼?

+1

您的問題可能源於您在'base.Render()'提供了可能導致重複鍵問題的控件後重新呈現所有子控件的事實。在生命週期的哪個階段,您是否動態地添加控件? –

回答

-1

看起來像手動呈現的子控件不是問題。我修改了代碼 ,因爲我最初將子控件分配給父控件的屬性,但將其更改爲將子控件添加到父控件的控件集合中(以便子控件現在可以通過它們的正確壽命週期)。我以前曾經手動渲染子控件時,他們是父控件的屬性,並仍然這樣做。當手動渲染所有的孩子時,控件將被再次添加。仍然不回答:

  • 爲什麼手動添加必要的,因爲這應該是自動的?
+1

這是一個額外的問題或解決方案? –

相關問題