我试图以编程方式填充文本框(txtFirstName,txtSecondName),方法是允许用户在文本框中键入(例如,4)并按下按钮将这些填充到面板中。因此,如果他们输入2,那么他们将获得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();
}
}
答案 0 :(得分:2)
您可以使用Request.Form
获取帖子参数。
已发布的参数使用呈现的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
Accessing control client name and not ID in ASP.NET
Get info about Http Post field order
答案 1 :(得分:1)
您可以尝试以下操作:
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