从动态文本框中获取用户输入

我有两个buttons 。 一个用于创建Textbox按钮和另一个用于提交信息的按钮。 创建textbox我无法检索用户文本。 这是代码:

  private void CreateTextBox(int j) //Creates the fields / cells { TextBox t = new TextBox(); t.ID = "Textbox" + j; //t.Text = "Textbox" + j; lstTextBox.Add(t); var c = new TableCell(); c.Controls.Add(t); r.Cells.Add(c); table1.Rows.Add(r); Session["test"] = lstTextBox; } protected void Button2_Click(object sender, EventArgs e) { string[] holder = new string[4]; for (int i = 0; i < holder.Length; i++) { holder[i] = ""; } List lstTextBox = (Session["test"] as List); if (lstTextBox.Count < Counter) { int i = lstTextBox.Count; for (int j = 0; j < i; j++) { holder[j] = lstTextBox[j].Text; } SqlConnection conns = new SqlConnection(ConfigurationManager.ConnectionStrings["TestDBConnectionString1"].ConnectionString); SqlCommand cmd = new SqlCommand("Insert into LoanerForm (field0, field1, field2, field3) Values (@field0, @field1, @field2, @field3)", conns); cmd.CommandType = CommandType.Text; cmd.Parameters.AddWithValue("@field0", holder[0]); cmd.Parameters.AddWithValue("@field1", holder[1]); cmd.Parameters.AddWithValue("@field2", holder[2]); cmd.Parameters.AddWithValue("@field3", holder[3]); conns.Open(); cmd.ExecuteNonQuery(); conns.Close(); } Counter = 0; Button1.Visible = true; //Going to submit data to SQL } 

先感谢您!

以下是动态创建TextBox的方法。 它跟踪ViewState中的文本框数量。

    public int Counter { get { return Convert.ToInt32(ViewState["Counter"] ?? "0"); } set { ViewState["Counter"] = value; } } protected void Page_Load(object sender, EventArgs e) { // Need to reload those textboxes on page back // Otherwise, they will becomes null int total = Counter; for (int i = 0; i < total; i++) { var textBox = new TextBox { ID = "TextBox" + i, Text = "TextBox" + i }; PlaceHolder1.Controls.Add(textBox); } } private void CreateTextBox(int id) { var textBox = new TextBox { ID = "TextBox" + id, Text = "TextBox" + id }; PlaceHolder1.Controls.Add(textBox); } protected void Button1_Click(object sender, EventArgs e) { CreateTextBox(Counter); Counter = Counter + 1; } protected void Button2_Click(object sender, EventArgs e) { int total = Counter; for (int i = 0; i < total; i++) { var textbox = PlaceHolder1.FindControl("TextBox" + i) as TextBox; var text = textbox.Text; // Do something with text } } 

不要将TextBox存储在Session中; 相反,在页面上创建它们。

诀窍是每次都在正确的时间创建它们(即每个PostBack)。 尝试为页面加载OnLoad()(如果可能,请加载CreateChildControls())。

一旦你这样做,ASP.NET将自动将输入与TextBox相关联,你应该能够像往常一样或通过父的.FindControl()引用它们。

我认为您使用大程序生成动态文本框并插入数据库。要从动态生成的文本框中检索文本,请使用下面的代码。

 Request.Form["Textbox" + i.ToString()] 

其中“i”表示您生成的文本框的数量。

欲了解更多信息,请查看以下链接。

如何从动态生成的文本框asp.net中将值插入sql db