码迷,mamicode.com
首页 > Web开发 > 详细

ASP.NET中DesignMode属性

时间:2014-12-03 00:19:56      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:des   blog   http   io   ar   os   sp   java   on   

参考:http://blog.sina.com.cn/s/blog_4c9da9b50100r4u7.html

        http://book.51cto.com/art/200902/108836.htm

 

在设计模式下,控件生命周期的所有方法并不是都执行的,比如CreateChildControls,OnPreRender,Load等方法在设计模式下就不会执行。而Init,Construct(构造方法),Render,RenderContents,还有Dispose等方法在设计模式下就会运行。这样设计的原则是合理的,因为在OnPreRender这一类事件中我们主要引入一些资源文件(JavaScript/Css/Pictures),在IDE设计器状态下这些文件路径是取不到的,它要根据当前运行的服务器虚拟路径来找到相应的文件名;还有,在Load,比如Page控件的PageLoad事件中,开发人员会将任意可能的代码放在这里执行,比如引用了服务端的上下文环境等,这时就会报"取不到信息"的异常错误。

由于在OnInit中调用的自定义函数里,访问了与服务器相关的变量,如Request,Response,Session,Server等,因为在设计模式时,这些变量是不会存在的,因此进行调用就会引发异常,从而导致这个错误的发生。
解决方案:
一个是检查HttpContext.Current是否为空;第二个就是不重写这样的页面流程函数,而改在事件中检查
采用第一种

protected   override   void   OnInit (EventArgs e)       
{
      if (System.Web.HttpContext.Current != null)
        {
                ......
                base . OnInit (e);           
        } 
}

另外有一种方法为

protected   override   void   OnInit (EventArgs e)       
{
     base.OnInit(e);
     if (!this.DesignMode)
     {  ......
     } 
}

ASP.NET中DesignMode属性

标签:des   blog   http   io   ar   os   sp   java   on   

原文地址:http://www.cnblogs.com/zfanlong1314/p/4138880.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!