如何从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; ... }