Asp.net 如何禁用ASP:面板但不禁用选择性子控件?
我在根目录上有一个asp:面板,里面有很多控件。 当我禁用面板时,所有子级都将被解散(panel.Enabled=false) 但我希望其中一些,例如超链接,即使容器被禁用,也保持启用状态 如果我不能用一种更聪明的方式来做这件事,我将不得不把我的面板分解成许多块来让它工作Asp.net 如何禁用ASP:面板但不禁用选择性子控件?,asp.net,webforms,Asp.net,Webforms,我在根目录上有一个asp:面板,里面有很多控件。 当我禁用面板时,所有子级都将被解散(panel.Enabled=false) 但我希望其中一些,例如超链接,即使容器被禁用,也保持启用状态 如果我不能用一种更聪明的方式来做这件事,我将不得不把我的面板分解成许多块来让它工作 编辑: 实际上,我正在做的是一个“只读”版本的页面和一个“可更新”版本的表单。如果你不想分解面板,那么你可以循环它的子控件(如果没有太多)。伪代码: foreach(var c in panel.controls) {
编辑:
实际上,我正在做的是一个“只读”版本的页面和一个“可更新”版本的表单。如果你不想分解面板,那么你可以循环它的子控件(如果没有太多)。伪代码:
foreach(var c in panel.controls)
{
if(c is not a hyperlink) c.Enabled=false;
}
如果要禁用大多数控件,请执行以下操作
DisableAllChildControls(panel); // disabled all controls within panel
//then enable those you want to keep enabled
HyperlinkControl1InPanel.Enabled=true;
HyperlinkControl2InPanel.Enabled=true;
...
void DisableAllChildControls(WebControl p)
{
foreach (WebControl c in p.Controls)
{
c.Enabled=false;
DisableAllChildControls(c); //recurse
}
}
或者如果您只想启用所有超链接
void DisableAllControlsButHyperlinks(WebControl p)
{
foreach (WebControl c in p.Controls)
{
c.Enabled=(c is HyperLink);
DisableAllControlsButHyperlinks(c); //recurse
}
}
很难理解你到底想要实现什么。以上的答案对我来说似乎完全合理。不过我有一种感觉,您希望只启用一些特定的控件,这些控件可能是一些特定的按钮和一些特定的超链接。对吗 为什么不考虑某种方法,声明不想禁用的控件(例如,带有它们的id)??您可以通过声明一个字符串列表来实现这一点,该字符串表示不应在页面/usercontrol中禁用的控件id,如
string[] controlIdsToKeepEnabled = new string[]{"buttonSubmit", "hyperlinkInfo"}
然后在递归禁用站点所有控件的方法中,检查控件是否不在“ControlIDstokeAppEnabled”列表中
有点复杂,但可以在你的特殊情况下使用。然后,此功能可以很好地打包到一个单独的自定义服务器控件中。尝试了所有解决方案,但不起作用,然后才从基础开始并实现。请参见下面的答案,这可能会对您有所帮助
foreach (Control c in Panel1.Controls)
{
if (c is WebControl)
{
WebControl wc = (WebControl)c;
if (c.ID.Equals("ControlID"))
{
wc.Enabled = true;
}
else
{
wc.Enabled = false;
}
}
}
作为文字控件?(如contentplaceholder不能作为webcontrol访问)并且cntrols enable属性仅可用于web和html控件当然我以前做过,但这是一个混乱,因为我的所有控件都有不同的状态,由另一个模块控制。我必须编程启用/禁用所有按钮,除了少数按钮。i、 我能有一个“c.Enabled=a | | B;”其中a是从B中抽象出来的吗?此外,A和B可以通过任何事件进行更改。您可以传递一个
params control[]keepanabled
参数,然后执行foreach(keepanabled中的网络控制c)c.Enabled=true代码>