我的应用程序中添加了一些动态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
。该怎么做?
被修改 这是我尝试时发生的事情:
foreach (Control control in PlaceHolder1.Controls)
{
if (control is TextBox)
{
TextBox txt = (TextBox)control;
lblScope.Text += string.Format("<li>{0}</li>", txt.Text);
}
}
如何阻止代码打印用户创建的第一个文本框的名称?
答案 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中的标签。如果没有调用相同的方法来检查当前控件中是否有嵌套的复选框。这是针对所有控件执行的。就像我说的那样叫做递归。