如何从动态文本框中检索数据?

时间:2015-01-16 19:57:28

标签: c# asp.net webforms

我的应用程序中添加了一些动态asp:TextBox:请参阅我的earlier post

protected void AddBoxes()
{
    counter++;
    TextBox tb = new TextBox();
    tb.ID = "Textbox" + counter;
    tb.TextMode = TextBoxMode.MultiLine;
    tb.Rows = 5;
    tb.CssClass = "larger_tb";
    LiteralControl linebreak = new LiteralControl("<br />");
    LiteralControl openLI = new LiteralControl("<li>");
    LiteralControl closeLI = new LiteralControl("</li>");
    PlaceHolder1.Controls.Add(openLI);
    PlaceHolder1.Controls.Add(tb);
    PlaceHolder1.Controls.Add(closeLI);
    PlaceHolder1.Controls.Add(linebreak);
    controlIdList.Add(tb.ID);
    ViewState["controlIdList"] = controlIdList;
}

现在我想直接从这些信息中提取信息到标签。我知道我需要使用循环,因为我不知道用户选择了多少。这就是我的尝试:

foreach (Control control in PlaceHolder1.Controls)
{
    for (int i = 0; i < counter; i++)
    {
        lblScope.Text = "<li>" + PlaceHolder1.Controls[i].ToString() +"</li>";
    }
} 

然而,所有这一切都打印出System.Web.UI.LiteralControl。该怎么做?

被修改 enter image description here 这是我尝试时发生的事情:

foreach (Control control in PlaceHolder1.Controls)
{
    if (control is TextBox)
    {
        TextBox txt = (TextBox)control;
        lblScope.Text += string.Format("<li>{0}</li>", txt.Text);
    }
}

如何阻止代码打印用户创建的第一个文本框的名称?

2 个答案:

答案 0 :(得分:0)

试试这个:

lblScope.Text = "";

foreach (Control control in PlaceHolder1.Controls)
{
    if (control is TextBox)
    {
        TextBox txt = (TextBox)control;
        lblScope.Text += string.Format("<li>{0}</li>", txt.Text);
    }
}

答案 1 :(得分:0)

private void ProcessAllControls(Control rootControl)
{
    foreach (Control childControl in rootControl.Controls)
    {
         if(childControl is TextBox)
         {  
              TextBox txt = (TextBox)childControl;             
              lblScope.Text += string.Format("<li>{0}</li>", txt.Text);
         }
         else
         {     
              ProcessAllControls(childControl);
         }   
    }
}

如果你在rootControl的其他控件中嵌套了Checkbox,你需要使用递归。你将调用这样的方法:

ProcessAllControls(PlaceHolder1);

我们正在做什么:我们循环PlaceHolder1中的所有控件,如果控件是复选框,我们将文本添加到PlaceHolder1中的标签。如果没有调用相同的方法来检查当前控件中是否有嵌套的复选框。这是针对所有控件执行的。就像我说的那样叫做递归。