我在后台动态生成了2个服务器的checkbox  也给ID赋值了 也有ruant 查看源文件也生产了,但是我在后台查找空间的时候
FindControl(); 找不到 怎么回事??那位大侠知道原因?

解决方案 »

  1.   

    你确定你生成的源文件中的控件名和你的findcotrol中的一样吗?
      

  2.   

    源码是这样的:
    页面:
         <form id="form1" runat="server">
        <div id="HtmlDiv" runat="server">
        </div>    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        </form>
    后台:
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CheckBox ch = new CheckBox();
                ch.ID = "cha";
                ch.Text = "第一个";
                this.HtmlDiv.Controls.Add(ch);            
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            CheckBox chk = (CheckBox)this.HtmlDiv.FindControl("cha");
         }
    现在那个chk 总是null 怎么回事哦??
      

  3.   

    你改到 CreateChildControls 里面初始化试试     protected override void CreateChildControls() {
                base.CreateChildControls();
                CheckBox ch = new CheckBox();
                ch.ID = "cha";
                ch.Text = "第一个";
                this.HtmlDiv.Controls.Add(ch);
            }
      

  4.   

    楼上的 用你的这种方法成功了 是什么原因呢? 还有 到后面我需要的是有个点击事件后才动态添加这个checkbox 现在这个是初始就有了 怎么解决呢?
      

  5.   

    http://msdn.microsoft.com/zh-cn/library/system.web.ui.control.createchildcontrols.aspx
    总的来说是asp.net 生命周期的问题, 具体意思你可以看msdn。
    另外你说 checkbox 要点击按钮创建 然后呢点击另一个按钮读取?
      

  6.   

    嗯 是的 ! 我刚才用 比如:点击按钮1 创建了checkbox 然后点击按钮2 但是就findcontrol不到这个checkbox了  
      

  7.   

    好像代码:CheckBox chk = (CheckBox)this.HtmlDiv.FindControl("cha");
    直接放在 Page_Load 中也可以找到