none
继承的页面重载init事件后无法向页面添加控件 RRS feed

  • 问题

  • 首先在项目中创建一个继承于page的类,然后创建一个aspx页面,继承于新创建的类

    此时如果不做任何操作页面添加控件正常,但是当重载Init事件或添加一个eventhandler后就不能想页面拖放添加控件

    可以直接将控件加在html代码中,但是设计器呈现是错误,说是未将对象引用至实例,编译却不报错页面运行也正常

    唯独不能拖放空间到设计器,注释掉init事件的重载时一切正常

    开发环境:vs2010,asp.net web应用程序

    2010年8月23日 15:33

答案

  • 有这种事?我还没试过2010。。。

    不过,你说的重载是什么意思?你的意思是重写(override)Page.OnInit方法,还是为Page.Init事件添加eventhandler?

    • 已标记为答案 fengyl 2010年8月26日 9:30
    2010年8月25日 4:33
  • 两种方法我都试过,现象都一样,后来在OnInitCommplete事件中实现逻辑就不存在这种问题

    只有在Init事件中实现逻辑才会这样

    • 已标记为答案 fengyl 2010年8月26日 9:30
    2010年8月25日 11:00
  • 我试了一下,确实有这个问题,只要你重写了oninit方法,并且添加了在DesignMode下不支持的代码之后就会在设计时报错。例如:

        protected override void OnInit(EventArgs e)
        {
          base.OnInit(e);      
          
          Response.Write("sadf");
        }
    

    此时就会报错:响应在此上下文中不可用。

    以前还真没注意到这个问题,谢谢楼主提出来。原因应该是Control在DesignTime下也会执行OnInit方法。至于你出现的异常,则是因为在init里控件还没有实例化。

    解决办法,加一个DesignMode的判断,例如:

        protected override void OnInit(EventArgs e)
        {
          base.OnInit(e);
          if(!DesignMode)
            Response.Write("sadf");
        }
    
    • 已标记为答案 fengyl 2010年8月26日 9:30
    2010年8月25日 14:23
  • 好了,加了一个后DesignMode问题解决了
    • 已标记为答案 fengyl 2010年8月26日 9:30
    2010年8月26日 9:29

全部回复

  • 有这种事?我还没试过2010。。。

    不过,你说的重载是什么意思?你的意思是重写(override)Page.OnInit方法,还是为Page.Init事件添加eventhandler?

    • 已标记为答案 fengyl 2010年8月26日 9:30
    2010年8月25日 4:33
  • 两种方法我都试过,现象都一样,后来在OnInitCommplete事件中实现逻辑就不存在这种问题

    只有在Init事件中实现逻辑才会这样

    • 已标记为答案 fengyl 2010年8月26日 9:30
    2010年8月25日 11:00
  • 我试了一下,确实有这个问题,只要你重写了oninit方法,并且添加了在DesignMode下不支持的代码之后就会在设计时报错。例如:

        protected override void OnInit(EventArgs e)
        {
          base.OnInit(e);      
          
          Response.Write("sadf");
        }
    

    此时就会报错:响应在此上下文中不可用。

    以前还真没注意到这个问题,谢谢楼主提出来。原因应该是Control在DesignTime下也会执行OnInit方法。至于你出现的异常,则是因为在init里控件还没有实例化。

    解决办法,加一个DesignMode的判断,例如:

        protected override void OnInit(EventArgs e)
        {
          base.OnInit(e);
          if(!DesignMode)
            Response.Write("sadf");
        }
    
    • 已标记为答案 fengyl 2010年8月26日 9:30
    2010年8月25日 14:23
  • 好了,加了一个后DesignMode问题解决了
    • 已标记为答案 fengyl 2010年8月26日 9:30
    2010年8月26日 9:29