Asp.net 从字符串动态转换控件

Asp.net 从字符串动态转换控件,asp.net,controls,Asp.net,Controls,我想从ControlCollection中禁用asp页上的某些控件 这是我的密码 foreach (System.Web.UI.Control c in ControlCollection) { if (c.GetType().FullName.Equals("System.Web.UI.WebControls.Table")) { TableRow t = (TableRow)c; t.Enabled = false; } else if

我想从ControlCollection中禁用asp页上的某些控件

这是我的密码

foreach (System.Web.UI.Control c in ControlCollection)
{
   if (c.GetType().FullName.Equals("System.Web.UI.WebControls.Table"))
   {
        TableRow t = (TableRow)c;
        t.Enabled = false;
   }
   else if (c.GetType().FullName.Equals("System.Web.UI.WebControls.TextBox"))
   {
        TextBox t = (TextBox)c;
        t.Enabled = false;
   }
  .......
  ......
  ///Like this I do for all controls
}

我需要一个更好的方法。我在网上搜索,但没有找到任何解决方案。

尝试使用
is

if (c is Table)
{

}
else if (c is TextBox)
{

}

或考虑在类型名上执行<代码>开关>代码>语句。< /P>

switch (c.GetType().Name.ToLower())
{
  case "table":
    break;
  case "textbox":
    break;
}

列表中的所有控件是否都继承自System.Web.UI.WebControl?如果是这样,那么此代码可能会有所帮助。(我自己没有测试)

甚至更优雅(比影子巫师还要优雅)

ControlCollection.OfType().ToList().ForEach(c=>c.Enabled=false);

您可以像这样使用
.OfType
扩展名,以获得更优雅的代码:

collection.OfType<Table>().ToList().ForEach(c => c.Enabled = false);
collection.OfType<TextBox>().ToList().ForEach(c => c.Enabled = false)
collection.OfType().ToList().ForEach(c=>c.Enabled=false);
collection.OfType().ToList().ForEach(c=>c.Enabled=false)

是的,这就是我想做的。我所有的控件都是web控件。但是我有这些错误,我需要你的帮助。如果我写类型wc=GetType(new System.UI.WebControl());我得到一个错误,说系统中不存在UI。如果我写类型wc=newsystem.Web.UI.WebControls.WebControl().GetType();它说WebControl由于其保护级别而无法访问。我已经编辑了我的代码。这个代码有效。提醒:页面的controlcollection只包含第一级控件。控件(如面板)将有自己的一组子控件。谢谢。这节省了我大量的编码,我学到了一些新东西。:)
ControlCollection.OfType<System.Web.UI.WebControls.WebControl>().ToList().ForEach(c => c.Enabled = false);
collection.OfType<Table>().ToList().ForEach(c => c.Enabled = false);
collection.OfType<TextBox>().ToList().ForEach(c => c.Enabled = false)