浅谈ASP.NET内部机制(五)

前言:本章要谈页面生命周期了,过程挺多的,但是一点都不难。不信可以看看。我尽量的讲的平实一些,而且理解页面的生命周期对喜欢开发自定义控件和组件的朋友是很有帮助的。

系列文章链接:

浅谈ASP.NET的内部机制(一)

浅谈ASP.NET的内部机制(二)

浅谈ASP.NET内部机制(三)

浅谈ASP.NET内部机制(四)

浅谈ASP.NET内部机制(五)

浅谈ASP.NET内部机制(六)

浅谈ASP.NET内部机制(七)

浅谈ASP.NET内部机制(八)

页面生命周期,也就是处理一个页面请求的过程。我们之前就说过了的,不同文件的由不同的处理程序来处理。而且处理程序都是实现了IHttpHandler接口。这个接口中有两个方法,其中真正用来处理请求的就是ProcessRequest方法。

所以当我们请求一个页面的时候,我们的页面,假如我们请求的是default.aspx这个页面是继承自Page,大家应该知道在程序运行的时候default.aspx以及它的.cs代码部分一起被编译成为default_aspx   ,如下:

Code
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace ASP
{
  public class default_aspx : Page
  {
  protected ScriptManager ScriptManager1;
  protected TextBox TextBox1;
  protected Button Button1;
  protected Label Info;
  protected UpdatePanel UpdatePanel1;
  protected HtmlForm form1;

private UpdatePanel @__BuildControlUpdatePanel1()
  {
  . . .
  }

private HtmlForm @__BuildControlform1()
  {
   . . .
  }
  
  private void @__BuildControlTree(default_aspx   @__ctrl)
 {
   IParserAccessor @__parser = ((IParserAccessor) (@__ctrl));
  @__parser.AddParsedSubObject(
  new LiteralControl(“<html   xmlns=\”http://www.w3.org/1999/xhtml\”>”));
@__parser.AddParsedSubObject(new LiteralControl(“\r\n<body>\r\n “));
HtmlForm @__ctrl2 = this.@__BuildControlform1();
@__parser.AddParsedSubObject(@__ctrl2);
@__parser.AddParsedSubObject(
new LiteralControl(“\r\n</body>\r\n</html>\r\n”));
}

protected override void FrameworkInitialize()
  {
   base.FrameworkInitialize();
   this.@__BuildControlTree(this);
  }
 }
}

因为我们的请求是请求的上面的那个default.aspx页面,也就是说我们请求的文件是以.aspx结尾的。而恰好以.aspx文件结果的处理程序是由Page来处理的,因为Page类实现了IHttpHandler.所以就是这里比较特殊,很多人都在这里糊涂过。因为default_aspx继承Page,所以请求defult.aspx的请求实际上是由default_aspx类的实例来处理的。这里讲点的有点绕,大家见谅。讲的更加通俗点基本上可以这么认为“自己处理自己”(这个说法很不严格,只是希望大家加深理解)。

其实处理的过程就是所谓的页面生命周期,说白了也就是处理的流程,大家看看下面Page类的ProcessRequest方法就知道了:(大家只要随便扫一下下面的代码就行了)

Code
public void ProcessRequest(HttpContext context)
{
  this._context = context;

this.RetrievePostedData();

if (this.MaintainScrollPositionOnPostBack)
  this.LoadScrollPosition();
  this.PerformPreInit();
  this.InitRecursive(null);
  this.OnInitComplete(EventArgs.Empty);
  if (this.IsPostBack)
  {
  this.LoadAllState();
  this.ProcessPostData(this._requestValueCollection, true);
  }
  this.OnPreLoad(EventArgs.Empty);
  this.LoadRecursive();
  if (this.IsPostBack)
  {
  this.ProcessPostData(this._leftoverPostData, false);
  this.RaiseChangedEvents();
  this.RaisePostBackEvent this._requestValueCollection);
  }
  this.OnLoadComplete(EventArgs.Empty);
  this.PreRenderRecursive();
  this.PerformPreRenderComplete();
  this.SaveAllState();
  this.OnSaveStateComplete(EventArgs.Empty);
  this.RenderControl(this.CreateHtmlTextWriter (this.Response.Output));
}

上面的代码,是不是有我们很熟悉的部分,如Init事件的触发方法,Load事件的触发方法(都是以On开发的方法)。相信大家应该明白了,其实页面的生命周期就是一个个方法的调用过程。

下面就是方法执行的图解:

大家可以对照方法从上往下看,因为很多的文章都已经详细的介绍了每个方法的作用,我这里不再赘述,如果大家需要的话就说下.

今天到这里。谢谢!

浅谈ASP.NET内部机制(五)相关推荐

  1. 浅谈ASP.NET的内部机制(一)

    浅谈ASP.NET的内部机制(一) 前言:当一个Http请求发送给一个aspx页面时,服务器进行了哪些操作?又如何来解析这个请求?ASP.NET在接收请求后是怎么运行的,如怎么编译以及怎么样用托管的代 ...

  2. 浅谈ASP.NET的内部机制(二)

    浅谈ASP.NET的内部机制(二)         前言:大家知不知道,一个Http Request是如何被传递给ASP.NET的?而且ASP.NET是如何知道一个 Http Request是请求的. ...

  3. 浅谈SQL Server内部运行机制

    原文:浅谈SQL Server内部运行机制 对于已经很熟悉T-SQL的读者,或者对于较专业的DBA来说,逻辑的增删改查,或者较复杂的SQL语句,都是非常简单的,不存在任何挑战,不值得一提,那么,SQL ...

  4. 浅谈 LiveData 的通知机制

    LiveData 和 ViewModel 是 Google 官方的 MVVM 架构的一个组成部分.巧了,昨天分析了一个问题是 ViewModel 的生命周期导致的.今天又遇到了一个问题是 LiveDa ...

  5. 袁萌浅谈C919大飞机(五)

    袁萌浅谈C919大飞机(五) 大家已经知道,C919大飞机是我们中国人自主"集成制造"的,而不是组装的大飞机.集成与组装是两个不同的概念. 设计C919大飞机机翼的横断面是很有学问 ...

  6. ajax机制 缓存,浅谈Ajax的缓存机制

    浅谈Ajax的缓存机制 Ajax的缓存机制和浏览器处理资源时的缓存机制是一样的. 三条简单规则: 只要是URL相同的GET请求,浏览器会使用缓存(当然还要看服务器的Cache-Control/Expi ...

  7. 浅谈 SQL Server 内部运行机制

    对于已经很熟悉T-SQL的读者,或者对于较专业的DBA来说,逻辑的增删改查,或者较复杂的SQL语句,都是非常简单的,不存在任何挑战,不值得一提,那么,SQL的哪些方面是他们的挑战 或者软肋呢? 那就是 ...

  8. js 单页面ajax缓存策略,浅谈ajax的缓存机制---IE浏览器方面

    这篇文章主要介绍了IE浏览器关于ajax的缓存机制,文中给大家提到了Ajax解决浏览器的缓存问题,解决方法有很多种.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. IE浏览器对于同一 ...

  9. 浅谈ASP.NET的Postback

    说道ASP.NET的Postback,就得说Web Page的生命周期,但是Web Page的生命周期却不是三言两语就能够说得清楚的,所以在这里单纯站的编程的角度,撇开Web Page 的生命周期浅谈 ...

最新文章

  1. Topcoder SRM 657DIV2
  2. echarts ucharts 和_使用chart和echarts制作图表
  3. .NET: 使用.NET Core CLI开发应用程序
  4. C/C++中的连续赋值
  5. C++笔记-二级指针在反汇编中的形式
  6. java 数据抓取 动态获得cookies里变动的属性_@CookieValue获取Cookie信息,使用Servlet API作为入参,处理模型数据...
  7. 【报告分享】新基建风口下,零售科技企业如何借势发展.pdf(附下载链接)
  8. WinForm程序启动时不显示主窗体的实现方法
  9. Python2.5.4移植到arm-linux
  10. 【Google设计冲刺】一种适合于创新小组的协作方式
  11. float.valueof()自动截取有效位数
  12. 石、鋏、布~ 最疯狂的打斗场面,莫要错过,iphone手机游戏
  13. 利用Openyxl为Excel批量插入表头行(Excel读写基础操作)——下
  14. 24bit,192KHz 双通道数模转换电路/立体声数模转换芯片MS4344 可替代CS4344-CZZR
  15. NB-IoT、LoRa、sigfox低功耗广域物联网技术,未来的争夺之战
  16. oracle数据库小记
  17. 多个 Excel 批量设置页眉页脚
  18. automagica 调用windows画图以及登录qq
  19. 无迹卡尔曼滤波算法(UKF)详细推倒及其仿真(matlab)
  20. LittleFS移植实践

热门文章

  1. 压缩文件夹_怎样压缩文件夹并发送
  2. DAC8830可以当做电位器来使用吗?
  3. 横河川仪压力变送器调零_YOKOGAWA/横河EJX110A差压变送器的性能误差和精度介绍!...
  4. php微信扫码支付报错,(转)微信调用扫码和支付功能是都报错 the permission value is offline verifying...
  5. c带gui的图书馆管理系统_定了!区图书馆24小时城市书屋即将在这天正式对外开放...
  6. ubuntu下php服务器搭建_Ubuntu服务器下搭建php运行环境的方法
  7. oracle行转列和列转行,oracle行转列和列转行(pivot 和 unpivot 函数,wm_concat函数 )...
  8. 硬盘突然提示没有初始化_分享一下固态硬盘不认盘的修复方法
  9. count时结果 hive_hive的count(distinct id)测试--慎用
  10. java 扫描包框架_在Android中实现类似Spring的软件包扫描