.Net_asp.net页面的生命周期

页面的生命周期

页面pr方法内部处理过程:
第一步:创建页面控件树,根据 Form里面的请求内容(ViewState)确定是否是IsPostBack
第二步:页面初始化之前
  this.PerformPreInit();
  private void PerformPreInit()
  {
    this.OnPreInit(EventArgs.Empty);//一般在这里面设置主题,加载模板由
    this.InitializeThemes();//初始化主题,如果已经设置主题直接退出,如果没有设置根据配置来。
    this.ApplyMasterPage();//设置模板页,如果模板页已经存在(如在OnInit代码里面设置了新的模板页就不走原来的了)就结束
    this._preInitWorkComplete = true;
  }
第三步:
  OnInit()执行
  this.OnInitComplete(EventArgs.Empty);//初始化结束;
第四步:处理回发数据
  if(IsPostBack)
  {
    this.LoadAllState();//加载所有的ViewSate:Page以及控件的

    this.ProcessPostData(this._requestValueCollection, true);//处理回发数据,就是看一下哪些控件变化了,然后调用下面的方法

    this.RegisterRequiresRaiseEvent(control.PostBackEventHandler);//注册要触发事件的控件
  }
第五步:
  this.OnPreLoad(EventArgs.Empty);//调用加载的事件

第六步:
  Onload()
  this.LoadRecursive();//递归加载,把所有控件里面的Load事件触发了

第七步:
  if(IsPostBack)

  {
    this.ProcessPostData(this._leftoverPostData, false);//再处理一下ViewState数据

    this.RaiseChangedEvents();//调用一些需要ViewState参与才能感知 事件的方法执行

    this.RaisePostBackEvent(this._requestValueCollection);//调用 按钮的click事件处理
  }


第八步:
  this.OnLoadComplete(EventArgs.Empty);加载完。
第十步:
    this.PrepareCallback(callbackControlID);//为 IsPostback设置标志
    this.PreRenderRecursiveInternal();//加载html,渲染服务器端控件之前,允许你最后一次改变当前控件东西

    this.SaveAllState();//保存ViewState

    this.OnSaveStateComplete(EventArgs.Empty);//保存完成
    this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));//把服务器控件转变成浏览器能识别的Html代码
    this._context.ApplicationInstance.CompleteRequest();

//最后生成响应报文返回给浏览器。

 

posted @ 2013-02-17 00:56  陆俊杰_iOS  阅读(236)  评论(0编辑  收藏  举报

版权信息:©Copyright © 2010-2050 陆俊杰的博客