相关源码

页面的Process方法

  1. // System.Web.UI.Page
  2. private void ProcessRequest(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)
  3. {
  4. if (includeStagesBeforeAsyncPoint)
  5. {
  6. //调用子类的方法(这是个虚方法),1,创建页面控件树
  7. this.FrameworkInitialize();
  8. base.ControlState = ControlState.FrameworkInitialized;
  9. }
  10. bool flag = this.Context.WorkerRequest is IIS7WorkerRequest;
  11. try
  12. {
  13. try
  14. {
  15. if (this.IsTransacted)
  16. {
  17. this.ProcessRequestTransacted();
  18. }
  19. else
  20. {
  21. //页面声明周期的主要部分
  22. this.ProcessRequestMain(includeStagesBeforeAsyncPoint, includeStagesAfterAsyncPoint);
  23. }
  24. if (includeStagesAfterAsyncPoint)
  25. {
  26. flag = false;
  27. this.ProcessRequestEndTrace();
  28. }
  29. }
  30. catch (ThreadAbortException)
  31. {
  32. try
  33. {
  34. if (flag)
  35. {
  36. this.ProcessRequestEndTrace();
  37. }
  38. }
  39. catch
  40. {
  41. }
  42. }
  43. finally
  44. {
  45. if (includeStagesAfterAsyncPoint)
  46. {
  47. this.ProcessRequestCleanup();
  48. }
  49. }
  50. }
  51. catch
  52. {
  53. throw;
  54. }
  55. }

ProcessRequestMain方法

  1. // System.Web.UI.Page
  2. private void ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)
  3. {
  4. try
  5. {
  6. HttpContext context = this.Context;
  7. string text = null;
  8. if (includeStagesBeforeAsyncPoint)
  9. {
  10. if (this.IsInAspCompatMode)
  11. {
  12. AspCompatApplicationStep.OnPageStartSessionObjects();
  13. }
  14. if (this.PageAdapter != null)
  15. {
  16. this._requestValueCollection = this.PageAdapter.DeterminePostBackMode();
  17. }
  18. else
  19. {
  20. this._requestValueCollection = this.DeterminePostBackMode();
  21. }
  22. string text2 = string.Empty;
  23. if (this.DetermineIsExportingWebPart())
  24. {
  25. if (!RuntimeConfig.GetAppConfig().WebParts.EnableExport)
  26. {
  27. throw new InvalidOperationException(SR.GetString("WebPartExportHandler_DisabledExportHandler"));
  28. }
  29. text = this.Request.QueryString["webPart"];
  30. if (string.IsNullOrEmpty(text))
  31. {
  32. throw new InvalidOperationException(SR.GetString("WebPartExportHandler_InvalidArgument"));
  33. }
  34. if (string.Equals(this.Request.QueryString["scope"], "shared", StringComparison.OrdinalIgnoreCase))
  35. {
  36. );
  37. }
  38. string text3 = this.Request.QueryString["query"];
  39. if (text3 == null)
  40. {
  41. text3 = string.Empty;
  42. }
  43. this.Request.QueryStringText = text3;
  44. context.Trace.IsEnabled = false;
  45. }
  46.  
  47. //2,确定IsCallback值
  48. if (this._requestValueCollection != null)
  49. {
  50. if (this._requestValueCollection["__VIEWSTATEENCRYPTED"] != null)
  51. {
  52. this.ContainsEncryptedViewState = true;
  53. }
  54. text2 = this._requestValueCollection["__CALLBACKID"];
  55. if (text2 != null && this._request.HttpVerb == HttpVerb.POST)
  56. {
  57. this._isCallback = true;
  58. }
  59. else
  60. {
  61. if (!this.IsCrossPagePostBack)
  62. {
  63. VirtualPath virtualPath = null;
  64. if (this._requestValueCollection["__PREVIOUSPAGE"] != null)
  65. {
  66. try
  67. {
  68. virtualPath = VirtualPath.CreateNonRelativeAllowNull(Page.DecryptString(this._requestValueCollection["__PREVIOUSPAGE"]));
  69. }
  70. catch
  71. {
  72. ] = true;
  73. }
  74. if (virtualPath != null && virtualPath != this.Request.CurrentExecutionFilePathObject)
  75. {
  76. ] = true;
  77. this._previousPagePath = virtualPath;
  78. }
  79. }
  80. }
  81. }
  82. }
  83. if (this.MaintainScrollPositionOnPostBack)
  84. {
  85. this.LoadScrollPosition();
  86. }
  87. if (context.TraceIsEnabled)
  88. {
  89. this.Trace.Write("aspx.page", "Begin PreInit");
  90. }
  91. , ))
  92. {
  93. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_ENTER, this._context.WorkerRequest);
  94. }
  95.  
  96. //3.1初始化PreInit
  97. this.PerformPreInit();
  98. , ))
  99. {
  100. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_LEAVE, this._context.WorkerRequest);
  101. }
  102. if (context.TraceIsEnabled)
  103. {
  104. this.Trace.Write("aspx.page", "End PreInit");
  105. }
  106. if (context.TraceIsEnabled)
  107. {
  108. this.Trace.Write("aspx.page", "Begin Init");
  109. }
  110. , ))
  111. {
  112. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_ENTER, this._context.WorkerRequest);
  113. }
  114. //3.2递归初始化,因为要初始化树,所以用递归
  115. this.InitRecursive(null);
  116. , ))
  117. {
  118. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_LEAVE, this._context.WorkerRequest);
  119. }
  120. if (context.TraceIsEnabled)
  121. {
  122. this.Trace.Write("aspx.page", "End Init");
  123. }
  124. if (context.TraceIsEnabled)
  125. {
  126. this.Trace.Write("aspx.page", "Begin InitComplete");
  127. }
  128. //3.3,初始化完成
  129. this.OnInitComplete(EventArgs.Empty);
  130. if (context.TraceIsEnabled)
  131. {
  132. this.Trace.Write("aspx.page", "End InitComplete");
  133. }
  134. if (this.IsPostBack)
  135. {
  136. if (context.TraceIsEnabled)
  137. {
  138. this.Trace.Write("aspx.page", "Begin LoadState");
  139. }
  140. , ))
  141. {
  142. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_ENTER, this._context.WorkerRequest);
  143. }
  144. //4.1,加载ViewState
  145. this.LoadAllState();
  146. , ))
  147. {
  148. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_LEAVE, this._context.WorkerRequest);
  149. }
  150. if (context.TraceIsEnabled)
  151. {
  152. this.Trace.Write("aspx.page", "End LoadState");
  153. this.Trace.Write("aspx.page", "Begin ProcessPostData");
  154. }
  155. , ))
  156. {
  157. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_ENTER, this._context.WorkerRequest);
  158. }
  159. //4.2,处理回发数据
  160. this.ProcessPostData(this._requestValueCollection, true);
  161. , ))
  162. {
  163. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_LEAVE, this._context.WorkerRequest);
  164. }
  165. if (context.TraceIsEnabled)
  166. {
  167. this.Trace.Write("aspx.page", "End ProcessPostData");
  168. }
  169. }
  170. if (context.TraceIsEnabled)
  171. {
  172. this.Trace.Write("aspx.page", "Begin PreLoad");
  173. }
  174. //5.1页面预加载
  175. this.OnPreLoad(EventArgs.Empty);
  176. if (context.TraceIsEnabled)
  177. {
  178. this.Trace.Write("aspx.page", "End PreLoad");
  179. }
  180. if (context.TraceIsEnabled)
  181. {
  182. this.Trace.Write("aspx.page", "Begin Load");
  183. }
  184. , ))
  185. {
  186. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_ENTER, this._context.WorkerRequest);
  187. }
  188. //5.2页面递归加载
  189. this.LoadRecursive();
  190. , ))
  191. {
  192. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_LEAVE, this._context.WorkerRequest);
  193. }
  194. if (context.TraceIsEnabled)
  195. {
  196. this.Trace.Write("aspx.page", "End Load");
  197. }
  198. if (this.IsPostBack)
  199. {
  200. if (context.TraceIsEnabled)
  201. {
  202. this.Trace.Write("aspx.page", "Begin ProcessPostData Second Try");
  203. }
  204. //5.3第二次尝试加载回发数据
  205. this.ProcessPostData(this._leftoverPostData, false);
  206. if (context.TraceIsEnabled)
  207. {
  208. this.Trace.Write("aspx.page", "End ProcessPostData Second Try");
  209. this.Trace.Write("aspx.page", "Begin Raise ChangedEvents");
  210. }
  211. , ))
  212. {
  213. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_ENTER, this._context.WorkerRequest);
  214. }
  215. //6.1,触发Change事件
  216. this.RaiseChangedEvents();
  217. , ))
  218. {
  219. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_LEAVE, this._context.WorkerRequest);
  220. }
  221. if (context.TraceIsEnabled)
  222. {
  223. this.Trace.Write("aspx.page", "End Raise ChangedEvents");
  224. this.Trace.Write("aspx.page", "Begin Raise PostBackEvent");
  225. }
  226. , ))
  227. {
  228. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_ENTER, this._context.WorkerRequest);
  229. }
  230. //6.2,触发点击事件
  231. this.RaisePostBackEvent(this._requestValueCollection);
  232. , ))
  233. {
  234. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_LEAVE, this._context.WorkerRequest);
  235. }
  236. if (context.TraceIsEnabled)
  237. {
  238. this.Trace.Write("aspx.page", "End Raise PostBackEvent");
  239. }
  240. }
  241. if (context.TraceIsEnabled)
  242. {
  243. this.Trace.Write("aspx.page", "Begin LoadComplete");
  244. }
  245. //5.3,页面加载完成
  246. this.OnLoadComplete(EventArgs.Empty);
  247. if (context.TraceIsEnabled)
  248. {
  249. this.Trace.Write("aspx.page", "End LoadComplete");
  250. }
  251. if (this.IsPostBack && this.IsCallback)
  252. {
  253. this.PrepareCallback(text2);
  254. }
  255. else
  256. {
  257. if (!this.IsCrossPagePostBack)
  258. {
  259. if (context.TraceIsEnabled)
  260. {
  261. this.Trace.Write("aspx.page", "Begin PreRender");
  262. }
  263. , ))
  264. {
  265. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_ENTER, this._context.WorkerRequest);
  266. }
  267.  
  268. //7,递归预渲染
  269. this.PreRenderRecursiveInternal();
  270. , ))
  271. {
  272. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_LEAVE, this._context.WorkerRequest);
  273. }
  274. if (context.TraceIsEnabled)
  275. {
  276. this.Trace.Write("aspx.page", "End PreRender");
  277. }
  278. }
  279. }
  280. }
  281. if (this._asyncInfo == null || this._asyncInfo.CallerIsBlocking)
  282. {
  283. this.ExecuteRegisteredAsyncTasks();
  284. }
  285. this._request.ValidateRawUrl();
  286. if (includeStagesAfterAsyncPoint)
  287. {
  288. if (this.IsCallback)
  289. {
  290. this.RenderCallback();
  291. }
  292. else
  293. {
  294. if (!this.IsCrossPagePostBack)
  295. {
  296. if (context.TraceIsEnabled)
  297. {
  298. this.Trace.Write("aspx.page", "Begin PreRenderComplete");
  299. }
  300. this.PerformPreRenderComplete();
  301. if (context.TraceIsEnabled)
  302. {
  303. this.Trace.Write("aspx.page", "End PreRenderComplete");
  304. }
  305. if (context.TraceIsEnabled)
  306. {
  307. this.BuildPageProfileTree(this.EnableViewState);
  308. this.Trace.Write("aspx.page", "Begin SaveState");
  309. }
  310. , ))
  311. {
  312. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_ENTER, this._context.WorkerRequest);
  313. }
  314. //8,保存页面状态到ViewState
  315. this.SaveAllState();
  316. , ))
  317. {
  318. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_LEAVE, this._context.WorkerRequest);
  319. }
  320. if (context.TraceIsEnabled)
  321. {
  322. this.Trace.Write("aspx.page", "End SaveState");
  323. this.Trace.Write("aspx.page", "Begin SaveStateComplete");
  324. }
  325. this.OnSaveStateComplete(EventArgs.Empty);
  326. if (context.TraceIsEnabled)
  327. {
  328. this.Trace.Write("aspx.page", "End SaveStateComplete");
  329. this.Trace.Write("aspx.page", "Begin Render");
  330. }
  331. , ))
  332. {
  333. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_ENTER, this._context.WorkerRequest);
  334. }
  335. if (text != null)
  336. {
  337. this.ExportWebPart(text);
  338. }
  339. else
  340. {
  341. //9,渲染出HTML
  342. this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));
  343. }
  344. , ))
  345. {
  346. EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_LEAVE, this._context.WorkerRequest);
  347. }
  348. if (context.TraceIsEnabled)
  349. {
  350. this.Trace.Write("aspx.page", "End Render");
  351. }
  352. this.CheckRemainingAsyncTasks(false);
  353. }
  354. }
  355. }
  356. }
  357. catch (ThreadAbortException ex2)
  358. {
  359. HttpApplication.CancelModuleException ex = ex2.ExceptionState as HttpApplication.CancelModuleException;
  360. if (!includeStagesBeforeAsyncPoint || !includeStagesAfterAsyncPoint || this._context.Handler != this || this._context.ApplicationInstance == null || ex == null || ex.Timeout)
  361. {
  362. this.CheckRemainingAsyncTasks(true);
  363. throw;
  364. }
  365. this._context.ApplicationInstance.CompleteRequest();
  366. Page.ThreadResetAbortWithAssert();
  367. }
  368. catch (ConfigurationException)
  369. {
  370. throw;
  371. }
  372. catch (Exception e)
  373. {
  374. PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_DURING_REQUEST);
  375. PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_TOTAL);
  376. if (!this.HandleError(e))
  377. {
  378. throw;
  379. }
  380. }
  381. }

Asp.Net原理Version3.0_页面声明周期的更多相关文章

  1. 【译】ASP.NET应用程序和页面生命周期

    为何翻译此文 一.此文是Code Project社区2010年4月ASP.NET板块的最佳文章,说明了此文的份量: 二.锻炼自己的英文技术文章翻译能力,提高英文技术文档阅读能力: 三.了解掌握ASP. ...

  2. 【转载】ASP.NET应用程序与页面生命周期

    在本文中,我们将了解不同的事件,ASP.NET 应用程序的生命周期以浏览器向 Web 服务器(对于 ASP.NET 应用程序,通常为 IIS)发送请求为起点,直至将请求结果返回至浏览器结束.在这个过程 ...

  3. ASP.NET最常用的页面生命周期事件

    PreInit:在页生命周期的早期阶段可以访问的事件.在PreInit事件后,将加载个性化信息和页主题. Init:在所有的控件都已初始化,且已应用所有外观设置后引发.使用该事件来读取或初始化控件属性 ...

  4. ASP.NET应用程序与页面生命周期

    http://www.cnblogs.com/suizhouqiwei/archive/2012/08/15/2637775.html

  5. asp.net请求管道和页面生命周期

  6. Asp.Net原理Version2.0

    有些部分被省略,可以看看Asp.Net原理Version1.0 Asp.Net原理Version3.0_页面声明周期

  7. Asp.Net原理Version1.0

    Asp.Net原理Version2.0 Asp.Net原理Version3.0_页面声明周期

  8. ASP.Net请求处理机制初步探索之旅 - Part 4 WebForm页面生命周期

    开篇:上一篇我们了解了所谓的请求处理管道,在众多的事件中微软开放了19个重要的事件给我们,我们可以注入一些自定义的业务逻辑实现应用的个性化设计.本篇,我们来看看WebForm模式下的页面生命周期. ( ...

  9. WebForm页面生命周期及asp.net运行机制

    1.先上几张原理图着重理解: 现在针对第四副图原理进行解析: 流程: 1.浏览器发送请求 2.服务器软件(IIS)接收,它最终的目的就是为了向客户输出它请求的动态页面生成的html代码. 3.服务器不 ...

随机推荐

  1. ASP.Net 获取当前时间,包含各种时间格式

    在c# / ASP.net中我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间 ...

  2. 快速调试chromium

    上一篇我们简单的将了在Ubuntu上编译chromium,android content_shell_apk的编译,一切顺利的就能生成apk.但是我们仅仅只是照搬了人家google开源的东西,作为一个 ...

  3. 学习 AngularJS 第一天

    AngularJS 高级程序设计 遇到问题:安装web服务器 var connect = require("connect"); connect.createServer( con ...

  4. Php 与 Json

    PHP与JSON 在PHP中存在两个与JSON相关的函数: json_encode($array或$object)函数:把一个数组或对象转化为JSON格式的字符串 json_decode($json, ...

  5. Code Review的一些典型内容

    如下是Code Review中一些典型的内容: 一.常规项: 1.代码能够工作么?它有没有实现预期的功能,逻辑是否正确等. 2.所有的代码是否简单易懂? 3.代码符合你所遵循的编程规范么?这通常包括大 ...

  6. MySQL 单表百万数据记录分页性能优化

    文章转载自:http://www.cnblogs.com/lyroge/p/3837886.html 背景: 自己的一个网站,由于单表的数据记录高达了一百万条,造成数据访问很慢,Google分析的后台 ...

  7. sql语句中like匹配的用法详解

    在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用 ...

  8. 解决DataSnap支持的Tcp长连接数受限的两种方法

    如何解决DataSnap支持的Tcp长连接数受限的问题? 方案一: 采用代理服务器方式,基本流程为: 1.客户先连接代理服务器:2.获取可用的服务器IP和端口:3.关闭与代理服务器之间的连接:4.建立 ...

  9. SQL JOB

    数据库同步是一种比较常用的功能.以下结合我自己的体会整理的,如果有理解不完全或者有误的地方望大牛不理赐教.下面介绍的就是数据库同步的两种方式: 1.SQL JOB的方式 sql Job的方式同步数据库 ...

  10. Wpf从资源中重用UI元素

    在我的界面上有几个选项卡,每个选项卡中都有下面的元素: <StackPanel Orientation="Horizontal"> <Button Content ...