Asp.net Foreach循环和占位符

Asp.net Foreach循环和占位符,asp.net,Asp.net,我的.aspx文件中有一个占位符 当我在.aspx.cs文件中将控件添加到中时,除了一些表格框和标签之外,我还添加了一些文字控件 phOutputs.Controls.Add(new LiteralControl("<tr><td>")); phOutputs.Controls.Add(lbl1); phOutputs.Controls.Add(new LiteralControl("</td><td>

我的.aspx文件中有一个占位符

当我在.aspx.cs文件中将控件添加到中时,除了一些表格框和标签之外,我还添加了一些文字控件

        phOutputs.Controls.Add(new LiteralControl("<tr><td>"));
        phOutputs.Controls.Add(lbl1);
        phOutputs.Controls.Add(new LiteralControl("</td><td>"));
        phOutputs.Controls.Add(tbx1);
        phOutputs.Controls.Add(new LiteralControl("</td></tr>"));
沿着这条路,我试着像这样使用foreach循环

foreach文本框tbxInput in phOutputs.Controls

但我在运行时遇到强制转换异常,表示无法将LiteralControl转换为tablebox


有什么更好的方法可以做到这一点呢?

如果您试图在文本框上循环,您可以使用Linq仅选择作为文本框的控件,然后迭代这些控件:

foreach(TextBox tbxInput in phOutputs.Controls.Where(o => o is TextBox))

瞧;无InvalidCastException。

此错误是因为您的集合不仅包含文本框。 OfType扩展可用于筛选

foreach (TextBox tbxInput in phOutputs.Controls.OfType<TextBox>())
{
}

另外,您也可以在foreach中对基类WebControl进行转换,而不是对TextBox进行转换,但这取决于您希望在该循环中执行的操作。当然,如果您需要特定于textbox的属性,则此变量不起作用。

您应该首先检查控件是否为textbox类型,然后相应地将其强制转换为textbox

foreach (control crtl in phInputs.Controls)
{
if(crtl is TextBox )
{
 TextBox txt = (TextBox )crtl;
}
}

实际上是什么?那是另一个占位符。我贴错了哦,酷,是的,这正是我想要的。我会试试的谢谢谢谢大家这些都是很好的答案。。。很难选出最好的