如何在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();
}
}
您可以使用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