C# 动态添加文本框并在单击按钮时捕获数据

C# 动态添加文本框并在单击按钮时捕获数据,c#,asp.net,C#,Asp.net,我正在动态添加文本框,并尝试在单击按钮时捕获文本框中输入的数据。但是现在发生的是,尽管我在文本框中输入了数据,但当我单击按钮时,页面正在加载,控件正在重新创建。因此,我丢失了文本框中的数据。您能告诉我如何捕获输入到动态创建的文本框中的数据吗。 我的示例代码如下: protected void Page_Load(object sender, EventArgs e) { Table tblTextboxes = new Table(); for(in

我正在动态添加文本框,并尝试在单击按钮时捕获文本框中输入的数据。但是现在发生的是,尽管我在文本框中输入了数据,但当我单击按钮时,页面正在加载,控件正在重新创建。因此,我丢失了文本框中的数据。您能告诉我如何捕获输入到动态创建的文本框中的数据吗。 我的示例代码如下:

   protected void Page_Load(object sender, EventArgs e)
    {
        Table tblTextboxes = new Table();
        for(int i=0;i<10;i++)
        {
            TableRow tr=new TableRow();
            TableCell tc=new TableCell();
            TextBox tb=new TextBox();
            tb.ID=i.ToString();
            tc.Controls.Add(tb);
            tr.Cells.Add(tc);

            TableCell tc1=new TableCell();
            LinkButton lnk=new LinkButton();
            lnk.ID=i.ToString()+tb.Text+"lnk";
            lnk.Text = "Show";
            lnk.Click+=new EventHandler(lnk_Click);
            tc1.Controls.Add(lnk);

            tr.Cells.Add(tc1);

            tblTextboxes.Rows.Add(tr);
        }
        placeTest.Controls.Add(tblTextboxes);
    }



void  lnk_Click(object sender, EventArgs e)
{
LinkButton lnk=sender as LinkButton;
Label lbl=new Label();
lbl.Text="The text is"+lnk.ID;
placeTest.Controls.Add(lbl);
}
受保护的无效页面加载(对象发送方,事件参数e)
{
Table tbltextbox=新表();

对于(int i=0;i
链接按钮ID
,每次在
文本框中输入文本并发回时都会更改

在动态创建控件时,需要确保的一件事是,在回发时,要使用相同的ID重新创建控件

更新的解决方案(从文本框检索文本)
受保护的无效页面加载(对象发送方,事件参数e)
{
var tbltextbox=新表();
对于(int i=0;i<10;i++)
{
var tr=新表行();
var tc=新的TableCell();
var tb=新文本框{ID=i.ToString()};
tc.对照组。添加(tb);
tr.Cells.Add(tc);
var tc1=新的TableCell();
//这是对-lnk.ID=i.ToString()+tb.Text+“lnk”的修复;
var lnk=newlinkbutton{ID=i+“lnk”,Text=“Show”};
lnk.Click+=lnk\u Click;
tc1.控件。添加(lnk);
tr.Cells.Add(tc1);
tbltextbox.Rows.Add(tr);
}
placeTest.Controls.Add(TBLTextBox);
}
无效lnk_单击(对象发送者,事件参数e)
{
var lnk=发送方作为链接按钮;
var lbl=新标签();
lbl.Text=“LinkButton ID:+lnk.ID;
//从字符串中获取数值
string id=Regex.Replace(lnk.id,@“[^\d]”,“”);
//按ID检索TextBox控件
var控制=FindControlRecursive(第页,id);
if(控件!=null)
{
var textbox=控件作为textbox;
lbl.Text+=“TextBox Text:”+TextBox.Text;
}
placeTest.Controls.Add(lbl);
}
公共控件FindControlRecursive(控件根,字符串id)
{
if(root.ID==ID)
返回根;
返回root.Controls.Cast()
.Select(c=>FindControlRecursive(c,id))
.FirstOrDefault(c=>c!=null);
}

LinkButton ID
每次在
TextBox
中输入文本并发回时都会更改

在动态创建控件时,需要确保的一件事是,在回发时,要使用相同的ID重新创建控件

更新的解决方案(从文本框检索文本)
受保护的无效页面加载(对象发送方,事件参数e)
{
var tbltextbox=新表();
对于(int i=0;i<10;i++)
{
var tr=新表行();
var tc=新的TableCell();
var tb=新文本框{ID=i.ToString()};
tc.对照组。添加(tb);
tr.Cells.Add(tc);
var tc1=新的TableCell();
//这是对-lnk.ID=i.ToString()+tb.Text+“lnk”的修复;
var lnk=newlinkbutton{ID=i+“lnk”,Text=“Show”};
lnk.Click+=lnk\u Click;
tc1.控件。添加(lnk);
tr.Cells.Add(tc1);
tbltextbox.Rows.Add(tr);
}
placeTest.Controls.Add(TBLTextBox);
}
无效lnk_单击(对象发送者,事件参数e)
{
var lnk=发送方作为链接按钮;
var lbl=新标签();
lbl.Text=“LinkButton ID:+lnk.ID;
//从字符串中获取数值
string id=Regex.Replace(lnk.id,@“[^\d]”,“”);
//按ID检索TextBox控件
var控制=FindControlRecursive(第页,id);
if(控件!=null)
{
var textbox=控件作为textbox;
lbl.Text+=“TextBox Text:”+TextBox.Text;
}
placeTest.Controls.Add(lbl);
}
公共控件FindControlRecursive(控件根,字符串id)
{
if(root.ID==ID)
返回根;
返回root.Controls.Cast()
.Select(c=>FindControlRecursive(c,id))
.FirstOrDefault(c=>c!=null);
}
基于,我建议使用
页面
类的
Init
事件。查看标题查看状态并动态添加控件进行解释。此外,我建议在所有现有控件的末尾添加动态控件。首先创建表,然后添加文本框

我修改了你的代码。它对我有效。我使用VS 2012、.Net 4.5

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write(DateTime.Now.ToString());

}
protected void Page_Init(object sender, EventArgs e)
{

    Table tblTextboxes = new Table();
    for (int i = 0; i < 10; i++)
    {
        TableRow tr = new TableRow();
        TableCell tc = new TableCell();
        TextBox tb = new TextBox();
        tb.ID = i.ToString();
        tc.Controls.Add(tb);
        tr.Cells.Add(tc);

        //TableCell tc1 = new TableCell();
        //LinkButton lnk = new LinkButton();
        //lnk.ID = i.ToString() + tb.Text + "lnk";
        //lnk.Text = "Show";
        //lnk.Click += new EventHandler(lnk_Click);
        //tc1.Controls.Add(lnk);

        //tr.Cells.Add(tc1);

        tblTextboxes.Rows.Add(tr);
    }
    placeTest.Controls.Add(tblTextboxes);

}

protected void Button1_Click(object sender, EventArgs e)
{

}
受保护的无效页面加载(对象发送方,事件参数e)
{
Write(DateTime.Now.ToString());
}
受保护的无效页_Init(对象发送方,事件参数e)
{
Table tbltextbox=新表();
对于(int i=0;i<10;i++)
{
TableRow tr=新的TableRow();
TableCell tc=新的TableCell();
TextBox tb=新的TextBox();
tb.ID=i.ToString();
tc.对照组。添加(tb);
tr.Cells.Add(tc);
//TableCell tc1=新的TableCell();
//LinkButton lnk=新的LinkButton();
//lnk.ID=i.ToString()+tb.Text+“lnk”;
//lnk.Text=“Show”;
//lnk.Click+=新建事件处理程序(lnk\u Click);
//tc1.控件。添加(lnk);
//tr.Cells.Add(tc1);
tbltextbox.Rows.Add(tr);
}
placeTest.Controls.Add(TBLTextBox);
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
}
基于,我建议使用
页面
类的
Init
事件。查看标题查看状态并动态添加控件进行解释。此外,我建议在所有现有控件的末尾添加动态控件。首先创建表,然后添加文本框

我修改了你的代码。它对我有效。我使用VS 2012、.Net 4.5

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write(DateTime.Now.ToString());

}
protected void Page_Init(object sender, EventArgs e)
{

    Table tblTextboxes = new Table();
    for (int i = 0; i < 10; i++)
    {
        TableRow tr = new TableRow();
        TableCell tc = new TableCell();
        TextBox tb = new TextBox();
        tb.ID = i.ToString();
        tc.Controls.Add(tb);
        tr.Cells.Add(tc);

        //TableCell tc1 = new TableCell();
        //LinkButton lnk = new LinkButton();
        //lnk.ID = i.ToString() + tb.Text + "lnk";
        //lnk.Text = "Show";
        //lnk.Click += new EventHandler(lnk_Click);
        //tc1.Controls.Add(lnk);

        //tr.Cells.Add(tc1);

        tblTextboxes.Rows.Add(tr);
    }
    placeTest.Controls.Add(tblTextboxes);

}

protected void Button1_Click(object sender, EventArgs e)
{

}
受保护的无效页面加载(对象发送方,事件参数e)
{
Write(DateTime.Now.ToString());
}
受保护的无效页_Init(对象发送方,事件参数e)
{
Table tbltextbox=新表();
对于(int i=0;i<10;i++)
{
TableRow tr=新的TableRow();
TableCell tc=新的TableCell(