本文从两个粒度对Asp.net生命周期做了展示,一是通过记录页面事件的触发顺序看请求的处理流程,一是通过Reflector看Page类内部对请求处理的实现,为了清晰我清理掉了ETW相关的代码保留了一个简化却足可以说明问题的流程骨架;
本文覆盖以下内容:
- 页面事件的触发顺序展示
- 清理掉ETW代码后的,Page类内部对请求处理的实现
- MSDN关于Asp.net生命周期非常重要的四个表格
- 演示源代码下载
1
using System;
2
using System.Configuration;
3
using System.Data;
4
using System.Web;
5
using System.Web.Security;
6
using System.Web.UI;
7
using System.Web.UI.HtmlControls;
8
using System.Web.UI.WebControls;
9
using System.Web.UI.WebControls.WebParts;
10
11
public partial class _Default : System.Web.UI.Page
12
{
13
protected void Page_PreInit(object sender, EventArgs e)
14
{
15
Response.Write("Page_PreInit<br/>");
16
}
17
protected void Page_Init(object sender, EventArgs e)
18
{
19
Response.Write("Page_Init<br/>");
20
21
}
22
protected void Page_InitComplete(object sender, EventArgs e)
23
{
24
Response.Write("Page_InitComplete<br/>");
25
26
}
27
protected void Page_PreLoad(object sender, EventArgs e)
28
{
29
Response.Write("Page_PreLoad<br/>");
30
31
}
32
protected void Page_Load(object sender, EventArgs e)
33
{
34
Response.Write("Page_Load<br/>");
35
36
}
37
protected void Page_LoadComplete(object sender, EventArgs e)
38
{
39
Response.Write("Page_LoadComplete<br/>");
40
41
}
42
protected void Page_PreRender(object sender, EventArgs e)
43
{
44
Response.Write("Page_PreRender<br/>");
45
46
}
47
protected void Page_SaveStateComplete(object sender, EventArgs e)
48
{
49
Response.Write("Page_SaveStateComplete<br/>");
50
51
}
52
53
54
protected void Page_Unload(object sender, EventArgs e)
55
{
56
int i = 0;
57
i++;//这行代码是用来设置断点的,为什么不用Response.Write?你说呢?
58
59
}
60
61
62
protected void Button1_Click(object sender, EventArgs e)
63
{
64
Label1.Text = "ControlEvent";
65
Response.Write("Button事件触发!<br/>");
66
}
67
}
68
69
70

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

运行结果:
Page_PreInit
Page_Init
Page_InitComplete
Page_PreLoad
Page_Load
Page_LoadComplete
Page_PreRender
Page_SaveStateComplete
点击页面的Button后的输出:
Page_PreInit
Page_Init
Page_InitComplete
Page_PreLoad
Page_Load
Button事件触发!
Page_LoadComplete
Page_PreRender
Page_SaveStateComplete