自定义控件中加入几个属性,
当这些属性赋值的时候会赋值给该自定义控件里面的几个动态产生的webcontrol(如textbox)而动态产生这几个webcontrol必须放在OnPreRender方法里面,然而这个方法中又不能调用RenderChildren方法,也就是说无法在赋值属性之前产生这几个webcontrol这样就会报错无法找到对象请问有什么好的办法可以解决么?
最好帮我解释一下自定义控件整个产生的顺序,万分感谢!

解决方案 »

  1.   

    强烈推荐你去看《Asp.net服务器控件与组件开发》里面对于控件的生命期将的很详细。
      

  2.   

    >>>动态产生这几个webcontrol必须放在OnPreRender方法里面为什么不能在CreateChildControls()里生成?>>>也就是说无法在赋值属性之前产生取决于你的控件的目的,可以考虑把属性的值放在临时变量里string ms;
    public String MyProp
    {
      get { return ms;}
      set { ms = value;}
    }
      

  3.   

    我做的是要把一个arraylist赋值并绑定到listbox上面,因此当属性被赋值的时候就会直接绑定到listbox,问题是赋值的时候listbox还没有动态产生,怎么办?CreateChildControls()事件也是在赋值语句之后才执行的吧?
      

  4.   

    call EnsureChildControls() in your propertypublic String MyProp
    {
      get { EnsureChildControls(); return ms;}
      set { EnsureChildControls(); ms = value;}
    }
      

  5.   

    那我的创建控件语句应该写在哪里呢?
    CreateChildControls()么?
      

  6.   

    如果动态生成的控件数量不多的话,你可以在属性成员中定义好。private TextBox tb1;
    private TextBox tb2;CreateChildControls()中添加的控件直接添加这几个现成的控件就行了。
      

  7.   

    另外一个问题:为什么我创建了控件之后,在CreateChildControls里面无法拿到控件的clientid?测试页面中拿到的还是控件本身的Id而不是clientid
      

  8.   

    ClientID is good after you added it to the Page's Controls' hierarchy