【问题标题】:How to get value from a TextBox如何从文本框获取价值
【发布时间】:2012-06-04 05:13:29
【问题描述】:

我改变了我的问题,因为它可能没有被理解。也对不起我的英语...

动态创建将它们放入数组中的文本框。

我的一段代码:

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 <BR> 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();
    }
}

如何获取文本框的值? 具体来说,我想在数据库中传递数据。如果我得到值,标签是一个测试。

谢谢!!!

【问题讨论】:

  • 您如何将控件从 nel1 和 PlaceHolder1 中取出?
  • 只是为了确保这不是类型问题,请将String x = txtName[i].Text; 更改为string x = (TextBox)(txtName[i]).Text;
  • 也许我弄错了,但您是否有可能在每次迭代时不小心覆盖了字符串“x”?
  • 另外,我看不出 txtName = new TextBox[authors] 是如何工作的,如果你只创建“作者”之后的行。在声明之前不能使用变量
  • @jimmysnn T_T 一般规则是总是说出你有什么错误。例如作者(当您创建数组时)尚未创建,字符串 x 应该是字符串 x。

标签: c# asp.net winforms visual-studio textbox


【解决方案1】:

不确定您是否知道,但您在 for 循环的每次迭代中都将 PlaceHolder1 放在 Panel1 中。也许您打算在 for 循环之后执行 Panel1.Controls.Add(PlaceHolder1);
无论如何,您已将这些 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 在回发后不会保留其值。

让你的第二个循环做一些比覆盖设置字符串更有用的事情;可能会将每个值添加到列表中

List<string> x = new List<string>();
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
}

【讨论】:

  • 要不然我有私有TextBox[] txtName;整数; For(i=0;
  • 就像你正在做的那样,但txtName 在回发后不会保留其值。你必须听从我给的建议。
【解决方案2】:

引用:

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

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

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

.

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

应该这样做

【讨论】:

  • System.Stringstring 在 C# 中是一样的。
  • @TimS。他没有具体说System.String。只有String 会导致混乱。我说正确是因为字符串是“默认类型”并且有助于阅读 -> 因为String 在某些情况下可以有不同的含义。
【解决方案3】:

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

OnInit:

Form1.Controls.Add(myTextbox);

Page_Load:

var text = myTextbox.Text;

查看HOW TO: Dynamically Create Controls in ASP.NET by Using Visual C# .NET 或“ASP.Net 如何添加动态控件”搜索条件的许多其他说明。

【讨论】:

    【解决方案4】:

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

    您可能希望在创建控件时将它们命名为独特且可引用的名称。

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多