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

        });
    } 

它有什么问题。如果我将控件签入即时窗口,那么它将显示已添加但未在页面上显示的控件。

4

1 回答 1

0

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

问题不仅限于HyperLink控件,而是除了ListItem控件之外的所有其他问题:当我们编写代码将一个不是 a 的控件添加ListItemListControllike CheckBoxListorDropDownList中时,即使框架不会返回异常,我们添加的控件也不会也会显示出来。

发生这种情况的原因是,当ListControl渲染其内容时,只会ListItem将控件写入页面,其他类型的控件将被忽略。就像下面展示的一样:

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

您可能会注意到 Controls 集合只是一个数据集合。渲染与否完全取决于容器。如果您在页面指令中打开“跟踪”选项,您将看到您添加的文字控件是一个节点CheckBoxList:它根本不呈现到 html。

于 2012-12-24T07:23:54.770 回答