Asp.net 从字符串动态转换控件
我想从ControlCollection中禁用asp页上的某些控件 这是我的密码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
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)