unless you do if (!IsPostBack) or other if special situation or do dynamically loading, all declared objects will be created upon postback, their states, depending on whether they have ViewState or whether their ViewState is enabled, may be kept, 参考http://blog.joycode.com/saucer/posts/19456.aspxand Understanding ASP.NET View State
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/viewstate.asp

解决方案 »

  1.   

    OnInit是每次都触发的
    如果你在第二次以后不做某事的话if (!this.IsPostBack)
    {
     第一次做的事
    }
      

  2.   

    OnInit 每次都执行的
     里面的 对象都重新生成
      

  3.   

    OnInit是每次都触发的,其中的对象都初始化一次。
      

  4.   

    可能楼主受到WinForm的影响,认为WebForm在第一次请求后就定型了,以后的请求都是在同一个对象上操作,其实不是这样的。我们应该这样理解:每一次请求整个Page对象都是重新new过的,所以里面的一切都是new的,OnInit自然跟随者在每一次new时被调用。而IsPostBack属性则只是通过分析这次请求的数据,来告诉你这次请求是否是PostBack的。
      

  5.   

    无特殊情况,比如!ispostback的话,全部重新建立,呵呵
      

  6.   

    谢谢各位,看了上面的回帖,我还有两个疑问:
    1.那么,既然所有对象都要更新,为什么Label的生成方法(调用new函数)不在OnInit中,而SqlConnection的生成方法在OnInit中出现?
    2.对象通过什么方法能够记忆住上一次的属性值哪?
      

  7.   

    1。好像是Label是无ViewState的控件2。对象通过ViewState来记住上一次直
      

  8.   

    1.SqlConnection也可以直接在Class内OnInit外在声明的地方写,和Label一样的。
    2.用ASP的思路来说,需要Post而不需要显示的值放在hidden;对应ASP.NET,需要被PostBack但不需要被显示的东东全部放ViewState。
      

  9.   

    To cat_hsfz():
    我知道IsPostBack用来判断网页是否是第一次被请求,但我不太明白你讲的什么叫做需要被PostBack?
      

  10.   

    SqlConnection的生成方法(调用new函数)是写OnInit中的,请问:Label的生成方法,是写在什么地方的?
      

  11.   

    所有的控件都在OnInit前实例化
    在成功创建页面的控件树后,然后再调用Init
      

  12.   

    “需要被PostBack”的意思是,这个数据的生命周期需要跨越PostBack的。上面说清楚了,页面每一次请求都重新实例化,所有参数的值都是默认值,这个和ASP无异。只不过在ASP.NET中,系统会自动分析这个请求,是不是PostBack请求。如果不是PostBack请求,那么就是你第一次请求页面所看到的“全新”页面;如果是PostBack,系统就会从Post的数据中自动进行自动分离处理,例如属于ViewState的就初始化并放到ViewState中,如果PostBack的数据表明这是一个“事件”,那么就触发该事件的逻辑。简单点说:
    1.页面确确实实每一次都重新实例化所有对象,所有值都是默认值,在这里ASP与ASP.NET一样。
    2.系统会对Post的信息进行分析提取,并把它们放到适合的对象里,这是ASP.NET特有的。
      

  13.   

    结贴!
    我现在基本上明白,但是还不太清楚Label之类的生成方法是写在什么地方的。