如何将服务器控件添加到Checkboxlist中

时间:2012-12-24 07:12:22

标签: asp.net sql-server c#-4.0 checkboxlist

我尝试将服务器控件(超链接)添加到我当前的复选框列表中(已经从数据库绑定)。这是代码。它被执行但控件未呈现并显示在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);

        });
    } 

它有什么问题。如果我将控件检查到即时窗口,那么它将显示添加的控件但不显示在页面上。

1 个答案:

答案 0 :(得分:0)

不,HyperLink控件不会在CheckBoxList中呈现。

问题不仅限于HyperLink控件,还包括除ListItem控件之外的所有其他控件:当我们编写代码以将控件(不是ListItem)添加到一个ListControl,如CheckBoxListDropDownList,即使框架不会返回任何异常,我们添加的控件也不会显示。

可能发生这种情况的原因是当ListControl呈现其内容时,只有ListItem控件将被写入页面,其他类型的控件将被忽略。很像下面演示的内容:

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

您可能会注意到Controls集合仅仅是一个数据集合。这完全取决于容器是否呈现它们。如果你打开page指令中的'Trace'选项,你会看到你添加的Literal控件是CheckBoxList的一个节点:它根本不会渲染到html。