FindCountrol指定一个控件的id,但实际上它却同时指定了2个,郁闷之极。
目录:
Default.aspx 里面有个用户控件UserLogon.ascx名字叫ModuleUserLogon
UserLogon.ascx中有两个Panel控件,一个PanelUserLogon,一个PanelProductInfo。
Panel plUserLogon = (Panel)(this.FindControl( "ModuleUserLogon ").FindControl( "PanelUserLogon "));
Panel plProductInfo = (Panel)(this.FindControl( "ModuleUserLogon ").FindControl( "PanelProductInfo "));
if(Session[UserId] == null)
{
plUserLogon.Visible = true;//如果用户没有登录就显示登录框
plProductInfo.Visible = false;//如果用户没有登录就不显示产品信息
}
以上代码中plUserLogon居然没有显示出来(用户没有登录),但是我调试它已经执行了plUserLogon.Visible = true;这一句。
如果我把plProductInfo.Visible改成true;
plUserLogon、plProductInfo居然都显示出来了。
我仔细检查了html代码,没有发现问题。
------解决方案--------------------------------------------------------
恐怕你自己还要仔细检查。
不过像你这样的代码,往往是因为设计者太聪明,过分聪明,以至于写出的程序给自己制造了很多很多多余的耦合对象。
用户控件应该隐藏内部控件的构造,如果摊开来让外部随便想当然地假设构造,就没有长久的戏可唱了。控件设计者就可以说没有把握大系统的能力了。