在Page_Load上获取动态创建的文本框的ID和值

时间:2017-05-04 09:28:24

标签: c# asp.net textbox

我有一个web.net应用程序asp.net。

我在Page_Load

中动态创建了54个文本框

这是代码

protected void Page_Load(object sender, EventArgs e)
{
    for(i = 0, i<54, i++)
    {
        Textbox TestTextbox = new texbox();
        TestTextBox.ID = "Reg" + i ;
        TestTextBox.Attributes.add("runat","server");
        TestTextBoxAttributes.Add("AutoPostBack", "true");

        //display to a table called table1 created in the aspx page
    }
}

在页面上,我有一个名为button1的按钮,以及一个名为“OnClickEvent”的点击事件,我想捕获所有文本框的ID和值。

我使用了Page.Controls.Count,我只得到1,我已经添加到aspx页面的表,我通过使用Request.Form获取ID但是我没有得到值。

我将所有文本框添加到我在aspx文件中创建的表中。

2 个答案:

答案 0 :(得分:1)

您可以遍历控件并检查它们是否为TextBox类型:

for(int i = 0, i<54, i++)) { 
    var control = Page.FindControl("Reg" + i);
    //get the value of the control 
}

答案 1 :(得分:0)

您没有将TextBox添加到页面,因此无论如何都找不到它。其次,将runat=serverAutoPostBack=true添加为字符串也不起作用。 (更不用说你的代码片段充满了错误)

//a loop uses ';', not ','
for (int i = 0; i < 54; i++)
{
    //declare a new dynamic textbox = CaSe SeNsItIvE
    TextBox TestTextbox = new TextBox();
    TestTextbox.ID = "Reg" + i;

    //if you want to add attibutes you do it like this
    TestTextbox.AutoPostBack = true;
    TestTextbox.TextChanged += TestTextbox_TextChanged;

    //add the textbox to the page
    PlaceHolder1.Controls.Add(TestTextbox);
}

如果你想循环所有控件,你可以做这样的事情

//loop all the controls that were added to the placeholder
foreach (Control control in PlaceHolder1.Controls)
{
    //is it a textbox
    if (control is TextBox)
    {
        //cast the control back to a textbox to access it's properties
        TextBox tb = control as TextBox;
        string id = tb.ID;
    }
}