0

我想从 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
}

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

4

3 回答 3

1

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

collection.OfType<Table>().ToList().ForEach(c => c.Enabled = false);
collection.OfType<TextBox>().ToList().ForEach(c => c.Enabled = false)
于 2013-05-21T08:40:27.157 回答
0

尝试使用is.

if (c is Table)
{

}
else if (c is TextBox)
{

}

或者考虑switch对类型名称做一个声明。

switch (c.GetType().Name.ToLower())
{
  case "table":
    break;
  case "textbox":
    break;
}
于 2013-05-21T08:21:21.793 回答
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);
于 2013-05-21T08:31:14.830 回答