zoukankan      html  css  js  c++  java
  • asp.net 动态添加自定义控件

      前两天一直纠结asp.net动态添加控件后,后台获取不到控件的问题,查看了网上很多的回答,可能自己的理解有误或者自己所掌握的知识有限,都没有解决我遇到的问题,经过两天的研究,终于把问题解决了。

      我这里大概是这样的:每点击添加控件的button,就添加一个自定义控件。

        protected void btnadd_Click(object sender, EventArgs e)
            {
                this.CreateControl();
            }
        private void CreateControl()
            {
                UserControl.control usercontrol = (UserControl.control)Page.LoadControl("UserControl/control.ascx"); 

            int count = this.PlaceHolder1.Controls.Count;
            usercontrol.ID
    = "VoiceReportControl" + (count + 1);
            usercontrol.Id
    = (count + 2).ToString();

            this.PlaceHolder1.Controls.Add(usercontrol); //注意一定要将控件添加在placeHolder控件中,不然会出现不显示的问题
      
            this.HiddenField1.Value = this.PlaceHolder1.Controls.Count.ToString(); //用隐藏域来存储当前已经添加的自定义控件的个数
         }

    然后在Page_Load中

           if (ViewState["firstLoad"] != null)//
                {
                    CreatControl1();//若不是首次加载,则添加控件
                }
           ViewState["firstLoad"] = false;//ViewState中可以随意存值,它是用于页面内传值的
    View Code
    /// <summary>
            /// 加载控件
            /// </summary>
            private void CreatControl1()
            {
                int count = 0;
                if (int.TryParse(this.HiddenField1.Value, out count))
                {
                    count = Convert.ToInt32(this.HiddenField1.Value);
                    for (int i = 0; i < count; i++)
                    {
                        UserControl.control usercontrol = (UserControl.control)Page.LoadControl("UserControl/VoiceReportControl.ascx");
                usercontrol.ID
    = "VoiceReportControl" + (i + 1);
                usercontrol.Id
    = (i + 2).ToString();

                this.PlaceHolder1.Controls.Add(usercontrol);
              }
           }
         } 

    网上好多都说些在OnInit中,但是如果写在这里面,执行的时候控件的viewState并没有被赋值,所以是获取不到隐藏域的值的,所以我选择现在page_Load里。先写到这里吧,欢迎大家一起讨论

  • 相关阅读:
    gcvt(),ecvt(),fcvt()的区别
    SQLITE3 使用总结
    C++的类型转换浅析
    JAVA Class21
    JAVA Class20
    JAVA Class19
    JAVA Class18
    JAVA Class17
    JAVA Class16
    关于hover失效问题(!important)
  • 原文地址:https://www.cnblogs.com/wyynts/p/3374640.html
Copyright © 2011-2022 走看看