我想从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
}
我需要一个更好的方法。我在互联网上搜索但没有找到任何解决方案。
答案 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);