zoukankan      html  css  js  c++  java
  • ASP.NET中DesignMode属性

    参考: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)
         {  ......
         } 
    }
  • 相关阅读:
    修饰符组合
    嵌入式C摘录
    c语言记事 关于extern和static
    iphone 设置iTunes共享目录
    MapKit 相关
    关于viewDidLoad在[super init]之前执行的问题
    UIScrollView相关
    ASIHttpRequest 学习
    iPhone Locate定位
    UTF7 编码转换
  • 原文地址:https://www.cnblogs.com/51net/p/4138880.html
Copyright © 2011-2022 走看看