2012-12-24 133 views
0

我嘗試將服務器控件(超鏈接)添加到我當前的複選框列表中(已與數據庫綁定)。這是代碼。它被執行但控制不被渲染並顯示在Checkboxlist中。如何將服務器控件添加到複選框列表

protected void Page_PreRender(object Sender, EventArgs e) 
    { 
     chkAttribute.Items.Cast<ListItem>().ToList().ForEach(s => 
     { 
      System.Web.UI.WebControls.HyperLink h = new HyperLink(); 
      h.Text = s.Value; 
      string url = "~/Default.aspx?Item=" + Server.UrlEncode(s.Value); 
      h.NavigateUrl = url; 
      chkAttribute.Controls.Add(h); 

     }); 
    } 

它有什麼問題。如果我將控件檢查到即時窗口,那麼它會顯示添加的控件,但不顯示在頁面上。

回答

0

不,HyperLink控件將不會呈現在CheckBoxList中。

問題不在於限制HyperLink控制,但所有的人除了ListItem控制:當我們編寫代碼來添加一個控制,這是不是一個ListItem,爲ListControlCheckBoxListDropDownList,即使框架會不會返回異常,我們添加的控件也不會顯示。

可能發生的原因是,當ListControl呈現其內容時,只有ListItem控件將被寫入頁面,其他類型的控件將被忽略。很像下面演示的東西:

for (int i = 0; i < this.Controls.Count; i++) 
{ 
    if ((this.Controls(i)) is ListItem) 
    { 
     //Render 
    } 
} 

您可能注意到Controls集合僅僅是一個數據集合。它完全取決於容器來渲染它們。如果在頁面指令中打開「跟蹤」選項,您將看到您添加的文字控件是CheckBoxList的節點:它根本不會呈現給html。

+0

檢查此鏈接...在這裏,他們添加標籤http://forums.asp.net/t/1383931.aspx/1 http://forums.asp.net/t/1611395.aspx/1 –

+0

@ SaroopTrivedi我已經看到該鏈接,他們將該標籤添加到'PlaceHolder(PlaceHolder1)'控件而不是'CheckBoxList(cblManufacturer或cblModels)'控件 – yogi

+0

:謝謝瑜珈師...所以我需要改變我的設計。我計劃用複選框的文本添加一個超鏈接。你有什麼想法,請告訴我。 –

相關問題