摘要:对于页生命周期的不了解会带来错误的ASP.Net编程。ASP.Net为Code-Behind和Event-Driven编程模式。每次客户端对页面的请求就会开始一次新的页生命周期,而Web页面是一种无状态的。为此,ASP.Net提出视图状态用于在每次回发请求之间保存控件的属性值,以克服无状态带来的问题。在了解页生命周期的基础上提出ASP.Net编程的指导性建议。
关键词:ASP.Net;页生命周期(Page Life Cycle);视图状态(View State);回发请求(PostBack Request);无状态(Stateless)
1 引述
页生命周期是Asp.Net中的重要概念,如果在不清楚页生命周期的概念下,你编写的Web程序很容易出现一些奇怪的问题,甚至是错误。这可以通过下面的例子说明。
如果你想开发一个Web用户控件,该控件类似于Windows应用中用到的“数字旋钮”控件,通过一个可调节按钮改变一个输入数字的大小。这个Web用户控件具有一个“TextBox”控件,两个“Button”控件。具体的控件设置如下表:
表 1 页面控件及属性设置
|
控件类型
|
控件属性
|
属性取值
|
说明
|
|
TextBox
|
ID
|
txtNumeric
|
记录数字的文本框
|
|
Text
|
0
|
|
Button
|
ID
|
btnUp
|
上调数字
|
|
Text
|
↑
|
|
Button
|
ID
|
btnDown
|
下调数字
|
|
Text
|
↓
|
该Web控件看起来如下图:
当我们按动“ ”按钮的时候,“txtNumeric”文本框的数字会自动增长一个整数1;而按动“ ”按钮的时候,“txtNumeric”文本框的数字会自动减少一个整数1。为了达到这一效果,需要在Web用户控件的后台代码中为“btnUp”和“btnDown”两个Button控件的“Click”事件编写代码,以及为Web用户控件定义一个公有属性“Numeric”,具体代码如下:
这段代码中实际定义了该Web用户控件的后台代码,记住该Web用户控件的名称是“WUCNumericTuner”。
现在可以使用该Web用户控件构件一个页面,用来求解两个整数相加运算,具体的页面如下图:

图 2 使用“WUCNumericTuner”用户控件构建的页面
但是,当我们按动两个“WUCNumeric”控件的调整按钮时候,会发现一个奇怪的现象,你们会发现,无论如何调整,求和的结果总是比实际相加的两个数求和的结果小一个数或者会大一个数,即求解的总是上一次调整的两个数字的相加之和。就象上图中“3 + 2 = 4”的错误结果。这到底是怎么回事呢?
为了解释这个问题,就必须从头开始了解Asp.Net的页生命周期的概念。