Asp.net总结(一)ViewState

来源:互联网 发布:lua编程入门 编辑:程序博客网 时间:2024/06/07 02:33

看Asp.Net视频时,于老师不断地提ViewState,还把它融合到服务器和客户端的交互过程中去讲,讲来讲去也只是明白了它用来存储页面的信息。稍微在网上一查,就发现介绍ViewState的知识挺多的,而且深浅不一。开始大脑里一篇混沌,整理融合了一下,发现也无非就是3个词的事:What、Why和How。

1.What

在认识ViewState之前有必要理解一下HTTP.

HTTP(HyperText TransferProtocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户端(如Web浏览器)能够从HTTP服务器端(Web服务器)请求信息和服务。HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(Response),连接就被关闭了,在服务器端不保留连接的有关信息

ViewState是一种机制,ASP.NET使用这种机制来跟踪服务器控件状态值,否则这些值将不作为HTTP窗体的一部分而回传。例如,由Label控件显示的文本默认情况下就保存在ViewState中。作为开发人员,可以绑定数据,或在首次加载该页面时仅对Label编程设置一次,在后续的回传中,该标签文本将自动从ViewState中重新填充。因此,除了可以减少烦琐的工作和代码外,ViewState通常还可以减少访问数据库的往返次数。

2.How

ViewStateASP.NET中用来保存WEB控件回传时状态值一种机制.WEB窗体(FORM)的设置为runat="server",这个窗体(FORM)会被附加一个隐藏的属性_VIEWSTATE._VIEWSTATE中存放了所有控件在ViewState中的状态值.ViewState是类Control中的一个域,其他所有控件通过继承Control来获得了ViewState功能.它的类型是system.Web.UI.StateBag,一个名称/值的对象集合.当请求某个页面时,ASP.NET把所有控件的状态格式化成一个base64编码字符串,然后做为窗体的隐藏属性送到客户端.当客户端把页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值.当然这些全部是由ASP.NET负责的.

结合服务器和客户端的交互过程看图:




在使用ViewState的时候需要有一下几点注意:

1.当存在页面回传时,不需要维持控件的值就要把ViewState禁止.

2.ViewState的索引是大小写敏感的.

3.ViewState不是跨页面的.

4.为了能保存在ViewState中,对象必须是可流化或者定义了TypeConverter.

5.控件TextBox的TextMode属性设置为Password时,它的状态将不会被保存在ViewState中,这应该是出于安全性的考虑.

6.当禁止一个程序的ViewState,这个程序的所有页面的ViewState也被禁止了.

7.viewstate并不是能存储所有的.net类型数据,它仅仅支持StringIntegerBooleanArrayArrayListHashtable 

以及自定义的一些类型.


Asp.Net中有很多的状态保存机制,除了ViewSate外,还有session、cookie等等,有必要对比一下他们的异同点。


0 0