页面从自写的PageBase继承,在1.1里正常,2.0里出现如下问题,PageBase里有关控件的代码就说没有引用到对象的实例例:
页面<asp:panel id="searchPanel" runat="server" Width="100%"></asp:panel>PageBase中 searchPanel.Visible = false;代码在1.1里是完全正确的,所以请大家按照2.0的变化帮我想想是因为什么如果有过类似问题并找到原因的兄才,请不吝赐教,多谢了

解决方案 »

  1.   

    PageBase中 protected virtual void SetControls()
    {
        searchPanel.Visible = false;
    }这种不能用了,提示没有引用到对象的实例
      

  2.   

    没说清楚,你的页面类是什么?只有在你的页面后面的类里才能直接使用searchPanel,因为在运行时,系统会自动生成一个partial类,其中包含页面的控件声明,然后与你的页面后面的类合并,然后生成一个继承自该类的页面类
      

  3.   

    saucer(思归) 老大你千万不要走,晚上这个问题不解决我就死定了,我再描述一下
      

  4.   

    现在涉及到的有3个文件,xxx.aspx,xxx.aspx.cs,PageBase.csxxx.aspx里<asp:panel id="searchPanel" runat="server" Width="100%"></asp:panel>xxx.aspx.cs里的类是 public partial class xxx : PageBase
    xxx.aspx.cs里调用SetControls()PageBase里有SetControls的定义
    protected virtual void SetControls()
    {
        searchPanel.Visible = false;
    }思归大哥,一定帮我啊,需要的话,我把文件发给你,我在1.1里没问题,升上来发现这个问题
      

  5.   

    it doesn't work this way, since the control will be declared in xxx, not PageBase, trymethod 1:PageBase:protected virtual void SetControls()
    {
        //....
    }in xxx:protected override void SetControls()
    {
        searchPanel.Visible = false;
    }method 2:protected virtual void SetControls(Control c)
    {
        c.Visible = false;
    }in xxx,
    SetControls(searchPanel);
      

  6.   

    原来的1.1的可以,是因为它的控件申明是在xxx.aspx.cs里,而不是在另一个自动生成的partial的类里,对吗?多谢你,我试试,如果是这样,那这个变动就造成不大方便了啊
      

  7.   

    思归大哥,是这样的,原来的1.1里,searchPanel变量肯定在xxx.aspx.cs里声明了,然后PageBase里的SetControls就可以用了