现在有一个panel,panel外面有个button,当我点击button的时候在panel里面加1个textbox,2个button.而且无刷新(用了ajax).
但是出了一个问题,当我点第2次以后 添加的时候panel里面始终只显示3个控件(1个textbox,2个button)求教如何解决.
代码如下:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                        <ContentTemplate>
                            <asp:Label ID="lblMessage" runat="server" ForeColor="Red" Text="lblMessage" 
                                Visible="False"></asp:Label>
                            <asp:RadioButtonList ID="rblNums" runat="server" RepeatDirection="Horizontal" 
                                Visible="False" RepeatColumns="5">
                            </asp:RadioButtonList>
                            <asp:Button ID="btnAdd" runat="server" Text="添加一帧" onclick="btnAdd_Click" />
                            <asp:Button ID="btnDelete" runat="server" Text="删除最后一帧" onclick="btnDelete_Click" />
                            <asp:Panel ID="panelContent" runat="server"></asp:Panel>                        </ContentTemplate>
                        <Triggers>
                            <asp:AsyncPostBackTrigger ControlID="btnAdd" EventName="Click" />
                            <asp:AsyncPostBackTrigger ControlID="btnDelete" EventName="Click" />
                            <asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" />                        </Triggers>
                    </asp:UpdatePanel>
                    <asp:Button ID="btnSave" runat="server" Text="保存" onclick="btnSave_Click" />  
后台代码:                        System.Web.UI.WebControls.TextBox txtShowContent = new TextBox();                        txtShowContent.Width = 150;
                        txtShowContent.Height = 200;
                        txtShowContent.TextMode = TextBoxMode.MultiLine;                        NewButton newbtnModify = new NewButton();                        newbtnModify.Text = "修改";
                        newbtnModify.DeleteOrModifyAddress = address;                        NewButton newbtnDelete = new NewButton();                        newbtnDelete.Text = "删除";
                        newbtnDelete.DeleteOrModifyAddress = address;
                        this.panelContent.Controls.Add(txtShowContent);
                        this.panelContent.Controls.Add(newbtnModify);
                        this.panelContent.Controls.Add(newbtnDelete);
                        this.panelContent.Visible = true;                  

解决方案 »

  1.   

    你这个,你把控件加到Panel上时就已经确定了这个控件的唯一性,当你再次单击按钮还能再接着添加吗?
    不行吧,你动态生成的控件在浏览器端应该也是唯一的了!怎么可能再接着加呢,它的ID,你加到Panel中时已经默认会给了吧
      

  2.   

    int a = 0;
                            System.Web.UI.WebControls.TextBox txtShowContent = new TextBox();
                            txtShowContent.ID = a.ToString();
                            txtShowContent.Width = 150;
                            txtShowContent.Height = 200;
                            txtShowContent.TextMode = TextBoxMode.MultiLine;                        NewButton newbtnModify = new NewButton();
                            newbtnModify.ID = a.ToString();
                            newbtnModify.Text = "修改";
                            newbtnModify.DeleteOrModifyAddress = address;                        NewButton newbtnDelete = new NewButton();
                            newbtnDelete.ID = (a + 1).ToString();
                            newbtnDelete.Text = "删除";
                            
                            newbtnDelete.DeleteOrModifyAddress = address;                        
                            
                            this.panelContent.Controls.Add(txtShowContent);
                            this.panelContent.Controls.Add(newbtnModify);
                            this.panelContent.Controls.Add(newbtnDelete);
                            this.panelContent.Visible = true;
                            a++;
                            ViewState["newbtnModify"] = true;
                            ViewState["newBtnDelete"] = true;
                            ViewState["txtShowContent"] = true;
    设置了ID 还是不得行
      

  3.   

    不是这个意思!!你这样改,不还是那些控件吗,无非是显式的加上了,你可以再拖入一个Panel,将上面动态生成的也加入这个Panel中,再看看加上没有
      

  4.   


    panel里面加panel 我也试过了 还是不行
      

  5.   

    根本就没加上去吧,
    你点击两下后,还是那第一次加上的控件
    你Form.Contorls.Count
    总共还是那些个控件数目吧
    怎么加呢?啊啊啊 我也晕了,怎么没高手来
      

  6.   

    没有做过无刷新的,但做过有刷新的点击button动态添加控件,添加之后,再次页面刷新时,页面控件就消失了
    你的总是显示3个,可能就是这个原因
    建议:将添加过的控件存起来,比如存在ViewState或Session中
    再点button添加时,先从Session中读出以前添加过的,然后在页面上添加一次,最后再添加这次要“新”添加的//希望对你有帮助
      

  7.   

    好的 谢谢你,我去试试 
    我在单独的一个页面里这样试过 private static Panel p = new Panel();
        protected void Page_Load(object sender, EventArgs e)
        {
            this.Controls.Add(p);
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            Label label = new Label();
            label.Text = "ccc";
            this.Panel1.Controls.Add(label);
        }这样的话就能 加进去  现在还在试 Ajax无刷新添加.但未能成功,继续加油...
      

  8.   


    protected void Button1_Click(object sender, EventArgs e)
      {
      Label label = new Label();
      label.Text = "ccc";
      p.Controls.Add(label);
      }
      

  9.   


    public partial class asp_DynamicControls : System.Web.UI.Page
    {
        public int Quantity
        {
            get
            {
                return ViewState["Quantity"] != null ? (int)ViewState["Quantity"] : 1;
            }
            set { ViewState["Quantity"] = value; }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
          
        }
        protected void btnSave_Click(object sender, EventArgs e)
        {  
         int nCount=Quantity;
         string strTxt = this.Request["txt"]!=null?this.Request["txt"].ToString():"";
         string[] arrTxt = strTxt.Split(',');
        List<string> lstAddItem = getItem(this.panelContent);
        for (int i = 1; i <= nCount; i++)
        {
                System.Web.UI.WebControls.TextBox txtShowContent = new TextBox();
                txtShowContent.Width = 150;
                txtShowContent.Height = 200;
                txtShowContent.TextMode = TextBoxMode.MultiLine;
                txtShowContent.ID = "txt";
                Button newbtnModify = new Button();
                newbtnModify.Text = "修改";
                Button newbtnDelete = new Button();
                newbtnDelete.Text = "删除";
                this.panelContent.Controls.Add(txtShowContent);
                this.panelContent.Controls.Add(newbtnModify);
                this.panelContent.Controls.Add(newbtnDelete);
                this.panelContent.Visible = true;
             if (i < nCount)
             {
                 if (this.Request["txt"] != null&&arrTxt.Length>i-1)
                 {
                     txtShowContent.Text = arrTxt[i-1];
                 }
            }    
            if (i == nCount)
            {
                ViewState["Quantity"] = nCount + 1;
            }
        }
            
        }    #region 获得Panel值(TextBox)(未使用)
        /// <summary>
        /// 获得Panel值(TextBox)
        /// </summary>
        /// <param name="dl"></param>
        /// <returns></returns>
        private List<string> getItem(Panel pl)
        {        List<string> lstAddItem = new List<string>();
            try
            {
                int nPlCount = pl.Controls.Count;
                for (int i = 0; i < nPlCount; i++)
                {
                    Object obj = (Object)pl.Controls[i];
                    if (obj is TextBox)
                    {
                        TextBox txt1 = (TextBox)obj;
                        lstAddItem.Add(txt1.Text.Trim());
                        continue;
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return lstAddItem;
        }
        #endregion
    }
    这个是后台程序 看看能不能解决你的问题