如何从TextBox中获取价值

我改变了我的问题,因为它可能不被理解。 也很抱歉我的英文…

动态创建TextBoxes,将它们放在数组中。

我的一段代码:

public partial class NewArticleForm : System.Web.UI.Page { private Label[] lblName; private TextBox[] txtName; private Label[] lblSurname; private TextBox[] txtSurname; private PlaceHolder PlaceHolder1; public int NumberOfOtherAuthors() { Int32 index = Convert.ToInt32(NumberList.SelectedValue); return index; } public void dataofOtherAuthor() { int authors; int i = 0; int j=1 authors = NumberOfOtherAuthors(); lblName = new Label[authors]; txtName = new TextBox[authors]; lblSurname = new Label[authors]; txtSurname = new TextBox[authors]; PlaceHolder1 = new PlaceHolder(); for (i = 0; i < authors; i++) { Label authorInformation = new Label(); authorInformation.Text = "Information for Author " + j.ToString() + " :"; lblName[i] = new Label(); lblName[i].Text = "Name:"; txtName[i] = new TextBox(); lblSurname[i] = new Label(); lblSurname[i].Text = "Surname:"; txtSurname[i] = new TextBox(); PlaceHolder1.Controls.Add(authorInformation); PlaceHolder1.Controls.Add(lblName[i]); PlaceHolder1.Controls.Add(txtName[i]); PlaceHolder1.Controls.Add(lblSurname[i]); PlaceHolder1.Controls.Add(txtSurname[i]); // Add a spacer in the form of an HTML 
element. Panel1.Controls.Add(PlaceHolder1); j++; } } protected void NumberList_SelectedIndexChanged(object sender, EventArgs e) { dataofOtherAuthor(); } private void UploadForm() { int numberOfOtherAuthors = NumberOfOtherAuthors(); int i=0; for (i = 0; i < numberOfOtherAuthors; i++) { Label1.Text = txtName[i].Text; } } protected void btnUpload_Click(object sender, EventArgs e) { UploadForm(); } }

我怎样才能获得文本框的价值? 具体来说,我想在数据库中传递数据。 如果我得到该值,则标签是测试。

谢谢!!!

不确定您是否知道,但是您在for循环的每次迭代中都将PlaceHolder1放在Panel1中。 也许你打算做Panel1.Controls.Add(PlaceHolder1); 在for循环之后?
无论如何,您已将这些TextBox控件放入表单中。 如果您尝试通过回发访问它们,则需要通过其设置ID访问它们,或者通过其asp容器访问它们(设置runat="server" ):

 x = (p1.Controls[placeHolderIndex].Controls[textBoxIndex] as TextBox).Text; 

或者你可以试试

 x = (p1.FindControl("placeHolder_ID").FindControl("textBox_ID") as TextBox).Text; 

再次确保它们都是runat="server"

回发后txtName不会保留其值。

让你的第二个循环做一些比覆盖set字符串更有用的东西; 也许可以将每个值添加到List

 List x = new List(); for (i = 0; i < authors; i++) { x.Add((p1.Controls[placeHolderIndex].Controls[i] as TextBox).Text); //increment placeHolderIndex if you don't change your design } 

引用:

 txtName = new TextBox[authors]; int authors = 5; 

您在创建数组后声明authors ,因此您的错误显示authors尚不存在,后来txtName不存在(因为它没有正确实例化)。 将其更改为:

 int authors = 5; txtName = new TextBox[authors]; 

另外,为了正确,将String更改为string

应该这样做

您需要在足够早的时间(通常为OnInit)正确地添加控件,以便控件正确地从post中获取值。

是OnInit:

 Form1.Controls.Add(myTextbox); 

Page_Load中:

 var text = myTextbox.Text; 

看看如何:使用Visual C#.NET动态创建ASP.NET中的控件或“ASP.Net如何添加动态控件”搜索条件的许多其他解释。

要检索占位符中的控件,请使用Placeholder1.FindControl(" [控件名称] ")

在创建控件时,您可能希望将控件命名为唯一且可引用的控件。

或者,如果您知道控件的索引,则可以使用Placeholder1.Controls( [Index] )引用它们。

我使用一种不同的方法创建对象,我称之为txtName[i] ,这是我的问题。

 public void dataofOtherAuthor() { ... txtName[i] = new TextBox(); ...} private void UploadForm() { ... Label1.Text = txtName[i].Text; ... }