从动态文本框中获取用户输入
我有两个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
- 如何使用gzip压缩.net对象实例
- 调用Microsoft.Owin.Cors后无法加载System.Web.Cors程序集
- http.context.user和thread.currentprincipal之间的区别以及何时使用它们?
- Asp.Net不包含buttonClick的定义?
- 将绑定xml绑定到Model Class
- 如何在同一.aspx页面上使用两个更新面板
- 发布错误:无法加载文件或程序集“Microsoft.Web.XmlTransform”,Version = 1.4.0.0,Culture = neutral等等或其依赖项之一
- 如何将数据从webform页面发布到HTTPHandler.ashx文件?
- Server.MapPath从root返回两个文件夹