从字符串动态转换控件

时间:2013-05-21 08:18:07

标签: 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 (c.GetType().FullName.Equals("System.Web.UI.WebControls.TextBox"))
   {
        TextBox t = (TextBox)c;
        t.Enabled = false;
   }
  .......
  ......
  ///Like this I do for all controls
}

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

尝试使用is

if (c is Table)
{

}
else if (c is TextBox)
{

}

或者考虑对类型名称执行switch语句。

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

答案 2 :(得分:0)

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

Type wc = new System.Web.UI.WebControls.WebControl(HtmlTextWriterTag.A).GetType();

    foreach (System.Web.UI.Control c in ControlCollection)
    {
        if (c.GetType().IsSubclassOf(wc))
        {
            ((System.Web.UI.WebControls.WebControl)c).Enabled = false;
        }
    }

更优雅(感谢Shadow Wizard)

ControlCollection.OfType<System.Web.UI.WebControls.WebControl>().ToList().ForEach(c => c.Enabled = false);