页面上有一个按钮,按一次就动态增加一个textbox控件,如何实现?
使用如下方法: 
    protected void Button1_Click(object sender, EventArgs e)
    {
        ((Label)TableHead.FindControl("Label10")).Text = TableHead.Controls.Count.ToString();
        rowCount = TableHead.Controls.Count;
        string tr,tc1,tc2,tc3,tc4,tc5;
        tr = "tr" + rowCount.ToString();
        tc1 = "tc" + rowCount.ToString() +"1";
        tc2 = "tc" + rowCount.ToString() +"2";
        tc3 = "tc" + rowCount.ToString() +"3";
        tc4 = "tc" + rowCount.ToString() +"4";
        tc5 = "tc" + rowCount.ToString() +"5";
        TableRow tr2 = new TableRow();
        tr2.ID = tr;
        TableCell tc11 = new TableCell();
        tc11.ID = tc1;
        TableCell tc21 = new TableCell();
        tc21.ID = tc2;
        TableCell tc31 = new TableCell();
        tc31.ID = tc3;
        TableCell tc41 = new TableCell();
        tc41.ID = tc4;
        TableCell tc51 = new TableCell();
        tc51.ID = tc5;
        TableHead.Controls.Add(tr2);
        tr2.Controls.Add(tc11);
        tr2.Controls.Add(tc21);
        tr2.Controls.Add(tc31);
        tr2.Controls.Add(tc41);
        tr2.Controls.Add(tc51);
    }
只能在首次按的时候添加了table的一行,再次按由于页面刷新,上次动态添加的无效了,所以无法实现连续的添加控件.如何解决这个问题?用别的方法也可以.
比如有一组文件要上传,我希望是开始显示3个上传栏,用户可以通过点按钮增加更多的上传栏.(一个实际需求的描述),当然我的问题不是这么简单,我简化成这样了,希望大家能明白,希望大家可以帮我解决,我搞了1天都没做出来啊,急啊~ 
只有90分了,上午散了200分,接分的去我的散分帖子,此90分全部给帮我解决此问题的人,先谢谢大家了.

解决方案 »

  1.   

    把这段代码写在一个方法中,记住增的行数,postback时再调用一次.
      

  2.   

    public int i = 2;
        protected void Button1_Click(object sender, EventArgs e)
        {
            ((Label)TableHead.FindControl("Label10")).Text = TableHead.Controls.Count.ToString();
            int rowCount = i;
            //rowCount = TableHead.Controls.Count;
            string tr,tc1,tc2,tc3,tc4,tc5;
            tr = "tr" + rowCount.ToString();
            tc1 = "tc" + rowCount.ToString() +"1";
            tc2 = "tc" + rowCount.ToString() +"2";
            tc3 = "tc" + rowCount.ToString() +"3";
            tc4 = "tc" + rowCount.ToString() +"4";
            tc5 = "tc" + rowCount.ToString() +"5";
            TableRow tr2 = new TableRow();
            tr2.ID = tr;
            TableCell tc11 = new TableCell();
            tc11.ID = tc1;
            TableCell tc21 = new TableCell();
            tc21.ID = tc2;
            TableCell tc31 = new TableCell();
            tc31.ID = tc3;
            TableCell tc41 = new TableCell();
            tc41.ID = tc4;
            TableCell tc51 = new TableCell();
            tc51.ID = tc5;
            TableHead.Controls.Add(tr2);
            tr2.Controls.Add(tc11);
            tr2.Controls.Add(tc21);
            tr2.Controls.Add(tc31);
            tr2.Controls.Add(tc41);
            tr2.Controls.Add(tc51);
            i++;
        }我是这样的,我把i省了发上来的,不行啊,那个i不能记录行数.
      

  3.   

    解决办法:
    把table的一行做成一个控件,然后每次Click Button的时候,增加一行,而不是一个个textbox增加!
      

  4.   

    你可以用Hidden记录~~~~~直接public变量
    post的时候就丢了
      

  5.   

    动态加载的控件,必须在每次postback服务器的时候再加载一次控件,不然以前加载的控件就会消失,所以一般动态加载控件的代码都房子page_load中,因为每次postback回服务器都会执行page_load,如果你执行的是button_click动态添加按钮a,但你再次点击该按钮的时候因为你没有再一次执行上次添加按钮a的代码,所以a就会消失
      

  6.   

    关键不是那个public变量丢失的问题,而是postback后,动态添加的控件都丢失了.
      

  7.   

    参考<script language="javascript" type="text/javascript">
    function addFile()
            {
                var filebutton = '<br><input type="text" size="50" name="File" class="ButtonCss" />';
                
                document.getElementById('FileList').insertAdjacentHTML("beforeEnd",filebutton);
            }
    </script><tr style="line-height:2;">
    <td style="width:155px" align="right">邮件附件:</td>
    <td><input type="button" value="增加附件" class="ButtonCss" onclick="addFile()" />
    </td>
    </tr>
    <tr style="line-height:2;">
    <td style="width:155px" align="right"></td>
    <td><p id="FileList"><input id="File1" type="text" runat="server" size="50" name="File" class="ButtonCss" /></p></td>
    </tr>
      

  8.   

    BearRui(AK-47)(奋斗目标:农妇,山泉,有点田) ( ) 信誉:110 
    ------------------------
    你说的很对阿,如何解决我这个问题呢?
      

  9.   

    symbol441(≮西门潇洒≯) ( ) 信誉:100 
    -----------------------------------------
    用js是可以添加,但是要用到动态添加的控件中的数据,postback的时候需要把所有的数据返回给服务器,这样似乎又回到了asp的时代阿。
      

  10.   

    你说的很对阿,如何解决我这个问题呢?
    ================================
    幕白兄已经回答过了,你可以用ViewState诸如此类的容器保存你上次的动态添加的控件和状态,回发以后重新创建
      

  11.   

    参考下这个,http://blog.csdn.net/raymondli/archive/2007/08/18/1749496.aspx
      

  12.   

    我不理解LZ的想法,保留意见
    我也做过类型的邮件系统
    后台对生对控件的读取代码,希望可以帮到LZ///添加邮件附件
    HttpFileCollection fileList = HttpContext.Current.Request.Files;
    for(int i = 0; i < fileList.Count; i++)
    {   ///添加单个附件
    HttpPostedFile file = fileList[i];
    if(file.FileName.Length <= 0 || file.ContentLength <= 0)
    {
    break;
    }
    Attachment attachment = new Attachment(file.FileName);
    mailMsg.Attachments.Add(attachment);
    nContain += file.ContentLength;
    }
      

  13.   

    protected void Page_Load(object sender, EventArgs e)
        {
            this.addRow(Convert.ToInt32(Label1.Text) - 2);
        }
        protected void addRow(int row1)
        {
            for (int i = 2; i < row1+2; i++)
            {
                int rowCount = i;
                TableRow tr2 = new TableRow();
                tr2.ID = "tr" + rowCount.ToString();
                TableCell tc11 = new TableCell();
                tc11.ID = "tc" + rowCount.ToString() + "1";
                TableCell tc21 = new TableCell();
                tc21.ID = "tc" + rowCount.ToString() + "2";
                TableCell tc31 = new TableCell();
                tc31.ID = "tc" + rowCount.ToString() + "3";
                TableCell tc41 = new TableCell();
                tc41.ID = "tc" + rowCount.ToString() + "4";
                TableCell tc51 = new TableCell();
                tc51.ID = "tc" + rowCount.ToString() + "5";
                TableHead.Controls.Add(tr2);
                tr2.Controls.Add(tc11);
                tr2.Controls.Add(tc21);
                tr2.Controls.Add(tc31);
                tr2.Controls.Add(tc41);
                tr2.Controls.Add(tc51);
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            ((Label)TableHead.FindControl("Label10")).Text = TableHead.Controls.Count.ToString();
            int rowCount = Convert.ToInt32(Label1.Text);
            TableRow tr2 = new TableRow();
            tr2.ID = "tr" + rowCount.ToString();
            TableCell tc11 = new TableCell();
            tc11.ID = "tc" + rowCount.ToString() + "1";
            TableCell tc21 = new TableCell();
            tc21.ID = "tc" + rowCount.ToString() + "2";
            TableCell tc31 = new TableCell();
            tc31.ID = "tc" + rowCount.ToString() + "3";
            TableCell tc41 = new TableCell();
            tc41.ID = "tc" + rowCount.ToString() + "4";
            TableCell tc51 = new TableCell();
            tc51.ID = "tc" + rowCount.ToString() + "5";
            TableHead.Controls.Add(tr2);
            tr2.Controls.Add(tc11);
            tr2.Controls.Add(tc21);
            tr2.Controls.Add(tc31);
            tr2.Controls.Add(tc41);
            tr2.Controls.Add(tc51);
            rowCount = rowCount + 1;
            Label1.Text = Convert.ToString((rowCount));
        }OK,搞定了,把具体的实现代码发出来,结贴了。
      

  14.   

    谢谢大家,看来是我的asp.net基本功不扎实阿。