我尝试将服务器控件(超链接)添加到我当前的复选框列表中(已经从数据库绑定)。这是代码。它被执行但控件未呈现并显示在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 :(得分:0)
不,HyperLink
控件不会在CheckBoxList中呈现。
问题不仅限于HyperLink
控件,还包括除ListItem
控件之外的所有其他控件:当我们编写代码以将控件(不是ListItem
)添加到一个ListControl
,如CheckBoxList
或DropDownList
,即使框架不会返回任何异常,我们添加的控件也不会显示。
可能发生这种情况的原因是当ListControl
呈现其内容时,只有ListItem
控件将被写入页面,其他类型的控件将被忽略。很像下面演示的内容:
for (int i = 0; i < this.Controls.Count; i++)
{
if ((this.Controls(i)) is ListItem)
{
//Render
}
}
您可能会注意到Controls集合仅仅是一个数据集合。这完全取决于容器是否呈现它们。如果你打开page指令中的'Trace'选项,你会看到你添加的Literal控件是CheckBoxList
的一个节点:它根本不会渲染到html。