如何在aspx页面中以编程方式创建多个文本框并保存到数据库

本文关键字:文本 数据库 保存 创建 方式 aspx 编程 | 更新日期: 2023-09-27 18:10:18

我试图通过允许用户在文本框中输入(例如,4)并按按钮将这些填充到面板中,以编程方式填充文本框(txtFirstName, txtSecondName)。如果他们输入2那么他们会得到两行分别是姓和名的文本框。我的问题是,当我保存时,我无法从这些文本框中获取文本,这些文本框是在飞行中创建的。有什么建议吗?

//button         
protected void Button1_Click(object sender, EventArgs e)
{
    int number = int.Parse(TextBox1.Text);
    for (int i = 0; i < number; i++)
    {
        //Horizontal line
        LiteralControl hrline = new LiteralControl();
        hrline.Text = "<hr />";
        //Textboxes
        TextBox txtFirstName = new TextBox();
        TextBox txtSecondName = new TextBox();
        //FirstName
        txtFirstName.ID = "txtFirstName" + i;
        txtFirstName.Text = "First Name " + i;
        //Second name
        txtSecondName.ID = "txtSecondName" + i;
        txtSecondName.Text = "Last Name " + i;
        buttonPanel.Controls.Add(hrline);
        pnlteacherExp.Controls.Add(txtFirstName);
        pnlteacherExp.Controls.Add(txtSecondName);
        pnlteacherExp.Controls.Add(hrline);
    }
}

保存按钮保存到数据库:

protected void btnSave_Click(object sender, EventArgs e)
{
    int number = int.Parse(TextBox1.Text);
    for (int i = 0; i < number; i++)
    {
        string connectionString = WebConfigurationManager.ConnectionStrings["crud_connection"].ConnectionString;
        SqlConnection sqlConnection1 = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "Store_proc";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Connection = sqlConnection1;
        sqlConnection1.Open();
        cmd.Parameters.AddWithValue("@staffPayroll", "payroll_num");
        cmd.Parameters.AddWithValue("@FirstName", ??);
        cmd.Parameters.AddWithValue("@Surname", ??);
        cmd.ExecuteNonQuery();
        sqlConnection1.Close();
    }                
}

如何在aspx页面中以编程方式创建多个文本框并保存到数据库

您可以使用Request.Form获取post参数。

张贴的参数是使用所呈现的html元素的name值,或服务器端的UniqueID,但由于您不能在服务器端设置UniqueID,并且因为您动态地制作它们,可能name被呈现为与id相同,至少在我的测试中,并且该行将为:

cmd.Parameters.AddWithValue("@FirstName", 
       Request.Form["txtFirstName" + i.ToString()]);

澄清一下,通常你需要做这个Request.Form[control.UniqueID]来获得发布的值,但是因为你没有control,因为你动态地制作它,不再存在了,下一步是用发布的名字来获取发布的值,所以发布的名字是这个"txtFirstName" + i.ToString(),你制作它们的方式。

相对:
asp.net request.form
在ASP中访问控制客户端名称而不是ID。净
获取有关Http Post字段顺序的信息

您可以尝试以下操作:

   TextBox txtFirstName = Controls.FindControl(string.Format("txtFirstName{0}", i)) as TextBox;
   string name = txtFirstName.Text;

您可以浏览此链接,了解如何保留动态创建的控件的状态:http://www.codeproject.com/Articles/3684/Retaining-State-for-Dynamically-Created-Controls-i