【问题标题】:How to add Server control into Checkboxlist如何将服务器控件添加到复选框列表中
【发布时间】:2012-12-24 07:12:22
【问题描述】:

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

        });
    } 

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

【问题讨论】:

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


    【解决方案1】:

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

    问题不仅限于HyperLink 控件,而是除ListItem 控件之外的所有其他控件:当我们编写代码以将不是ListItem 的控件添加到ListControl 中时,就像@ 987654328@或者DropDownList,虽然framework不会返回异常,但是我们添加的控件也不会显示出来。

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

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

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

    【讨论】:

    • 检查这个链接...他们在这里添加标签forums.asp.net/t/1383931.aspx/1forums.asp.net/t/1611395.aspx/1
    • @SaroopTrivedi 我已经看到了那个链接,他们正在将该标签添加到 PlaceHolder (PlaceHolder1) 控件而不是 CheckBoxList (cblManufacturer or cblModels) 控件
    • :谢谢瑜伽士...所以我需要改变我的设计。我计划添加一个带有复选框文本的超链接。你有什么想法请告诉我。
    • @SaroopTrivedi 为此,您应该创建一个自定义的User Control,并且Control.Add 接受所有类型,因为它不是CheckBoxList 类中的方法,如果您要向上继承层次结构,您将发现它的Control 类具有这个属性,所以它对所有WebControl 类都是通用的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多