我有一个母版页,那里只有一个菜单项和一个contentplaceholder。我有另一个从该母版页继承的Web表单。我还把我的所有控件放在contentplaceholder中。在我的表单的Page_Load事件中,我想设置所有下拉列表控件的Enabled = false。为此,我写道:
foreach (Control control in Page.Controls)
{
if (control is DropDownList)
{
DropDownList ddl = (DropDownList)control;
ddl.Enabled = false;
}
}
但所有下拉列表仍为启用状态。当我检查Page.Control的计数时,我只看到一个控件,它是表单主页的menuitem。我该怎么做才能获得当前形式的控件列表?
答案 0 :(得分:1)
这是适合我的代码。您是对的,无法从页面访问内容控件,因此您使用Master.FindControl ...代码。请务必将ContentPlaceHolderID参数插入Master.FindControl(“righthere”)表达式。
ContentPlaceHolder contentPlaceHolder = (ContentPlaceHolder)Master.FindControl("MainContent");
if(contentPlaceHolder != null)
{
foreach (Control c in contentPlaceHolder.Controls)
{
DropDownList d = c as DropDownList;
if (d != null)
d.Enabled = false;
}
}
答案 1 :(得分:1)
你的foreach循环不起作用,因为你的控件可以有子控件,他们也可以有子控件然后DDL。
我更喜欢的是首先创建一个控件列表,然后遍历该列表,该列表中填充了您想要的DDL控件。
public void FindTheControls(List<Control> foundSofar, Control parent)
{
foreach(var c in parent.Controls)
{
if(c is IControl) //Or whatever that is you checking for
{
if (c is DropDownList){ foundSofar.Add(c); } continue;
if(c.Controls.Count > 0)
{
this.FindTheControls(foundSofar, c);
}
}
}
}
稍后您可以直接遍历foundSofar,并确保它将包含其中的所有DDL控件。