日期:2014-05-20  浏览次数:20407 次

FindCountrol指定一个控件的id,但实际上它却同时指定了2个,郁闷之极。
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代码,没有发现问题。



------解决方案--------------------
恐怕你自己还要仔细检查。

不过像你这样的代码,往往是因为设计者太聪明,过分聪明,以至于写出的程序给自己制造了很多很多多余的耦合对象。

用户控件应该隐藏内部控件的构造,如果摊开来让外部随便想当然地假设构造,就没有长久的戏可唱了。控件设计者就可以说没有把握大系统的能力了。