asp.net 视图状态简介

在asp.net开发的应用程序中,当某个页面被请求时,它的类及其所包含的服务器控件会负责处理请求,呈现HTML输出,并随后发回客户端.由于HTTP协议的固有特性,客户端与服务器间的通信是无状态且非连接的.而实际的应用程序需要状态,以便维护同一页面的后续调用.使用asp或其他服务器端开发平台(如jsp,php),程序员必须负责状态的存储和恢复.尽管基于无状态的协议,但以这种方式,从客户端体验到的是连续的执行过程,然而,这只是一种表象.

连续性所导致的这种现象,一方面与页面的设计和工作方式有关,另一方面是asp.net页面视图状态造成的.与此同时,服务器端控件也发挥着重要作用.简而言之,在页面将其内容呈现为html之前,页面要将自身及其所包含的控件的状态信息存储在持久性介质(通常是隐藏字段)中.当页面回发后,其状态会从隐藏字段中被反序列化,用于对申明在页面布局中的服务器控件实例进行初始化.

每个页面实例有其特有的视图状态,因为该信息嵌入在html中,这样做的好处是,控件会以上一次创建的视图状态(即该页最后一次被呈现发送到客户端时的状态)的值进行初始化.此外,页面周期中还会有一个阶段,将以存储的状态与由客户端做出的更新合并.在回发后,页面执行时,它会发现一个有状态的且更新过的上下文,就像工作在连续的对点连接上一样.

这里做了两个假设,第一个假设是,页面总是投递给自身,并携带着状态信息.第二个假设是,服务器端控件必须带有runat=server属性,以便在页面回发后具有"生命力".

发布了31 篇原创文章 · 获赞 2 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章