ASP.NET2.0的页生命周期

添加人:admin四级(1693分)   添加时间:2007-12-02    阅读次数:3870  收藏此教程

3.页面的请求
无论是ASP.Net技术,还是Java的JSP技术,以及其他的什么PHP技术,都是基于Html标记和Http协议这些已成事实的国际标准来构建Web应用的。这需要我们搞清楚两个事实:①所有这些动态网页构建技术最终都是在做一件事情,即把它们的特殊页面标记或后台程序的运行结果,翻译和转换成浏览器只认识的“Html”标记语言;②所有从浏览器发送的页面浏览请求都是一次性的,不会在浏览器端留下任何程序运行过程中的内存信息,我们称这为“无状态”的请求,所有的程序计算都发生在服务器端的一次请求过程中。这一点可以说是Internet存在的固有特点所要求的,即不能长时间由一个客户端占据着和服务器之间的网络资源,同时也为我们编程带来了极大的麻烦,因为整个程序的运行要得到最终结果,需要很多中间过程,而“无状态”的情况会让程序丢失中间步骤的运算结果,而无法得到正确的最终结果。

对于上述两个事实,ASP.Net技术都为我们提供了很好的支持。具体来说包括:标记呈现技术和视图状态技术。 

3.1.ASP.Net标记的呈现(ASP Tag Render)
我们看到在ASP.Net的页面文件(xxx.aspx / xxx.ascx)中有很多类似于“asp:Button”这样的标记,它们最终在一次页请求的最后阶段要被翻译成一个或几个标准的“Html”标记。

例如:上述两个“TextBox”控件在页面文件中就是以“asp:Button”标记定义的。它们最终在浏览器中查看源文件的时候会变成如同下方的一段“Html”代码:

代码 3 ASP.Net标记被呈现为Html代码
<input type="submit" name="WUCNumericTuner1$btnUp" value="↑" id="WUCNumericTuner1_btnUp" /> 

3.2.视图状态(View State)
而为了能够记录一个页面在程序运行期间得到的中间结果,提出了“视图状态”的概念。它实际上通过一个特殊的“Html”标记记录下每次运行的中间结果。这个特殊的“Html”标记如下:

代码 4 视图状态在Html中的呈现
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTEyNDAzMzYwMw9kFgICAw9kFgICBQ8PFgIeBFRleHQFATBkZGQ+Un61OAiXnW7Zrz37EiJnbfsxfg==" />

这是一个“隐藏域”的“Html”标记。它的值是被加密了的字符串,主要是记录下控件或页面的属性取值。在每次页面请求的过程中都要被自动恢复到控件上去,这样就能把“无状态”的页面请求变成所谓的“有状态”的页面请求。

在Page和每个控件的类定义中,都有一个受保护的成员属性“ViewState”用来记录它们的属性值,并在每次页请求的初期从“ViewState”中恢复上次页请求时记录下来的取值到页面或控件的属性上,以备当前请求之用。

而页面上的很多控件都具有与用户交互的特性,例如:文本框控件能够接受用户的输入,并将其回发给服务器。但同时,很多控件的属性在设计时可以指定一个初始值,这样就产生了两种视图状态:静态页视图状态;动态页视图状态。

(1)静态页视图状态

控件的属性在设计时给定的取值。这些取值在页面被初始化之前就被赋值给控件的属性。

(2)动态页视图状态

控件的属性在运行时由用户从UI输入的值,或者用户在后台代码中给与的赋值。对于前者来说,用户输入的值会在页面初始化之后,页面装载之前被自动恢复给控件的属性。而对于后者来说,在页面卸载之前还可以通过赋值改变控件的属性值,以呈现到浏览器中,而在卸载阶段赋值,则无法将改变之后的属性值呈现给浏览器。

 
3.3.页请求的类别
对于同一个页的请求分为两种:初次请求;回发请求。对于页和控件,都有一个公共属性IsPostBack,用来标识页请求的类别。

(1)初次请求(First Request)

页面第一次加载到浏览器中,为初次请求。一般地,用户通过在浏览器的地址栏内输入页面Url地址发出的请求,通过用户点击超文本链接而转到该页面的请求都是初次请求。可以通过判断“IsPostBack == false”来确定当前页面的请求为初次请求。

(2)回发请求(PostBack Request)

当用户与页面上的控件进行交互而引起的当前页面刷新,将当前页面回送给服务器,再次对该页面的请求为回发请求。可以通过判断“IsPostBack == true”来确定当前页面的请求为回发请求。例如:Button控件的Click事件,是由用户单击Button控件引发的,这就会引起回发请求。

5页 第3上一页12345下一页
相关的教程: Asp.Net2.0 生命周期
收藏此教程

当前平均分: 0.0(0 次打分)

-5-4-3-2-1012345
评论主题
您的大名
您的评论
验证码 点击换一个验证码
知识库搜索: