程序中保存状态的方式有以下几种:
1、Application 2、Cookie 3、Session
4、ViewState:ViewState是保存状态的方式之一,ViewState实际就是一个Hidden字段,但是它是服务器控件状态保存的基础如下代码
1 <form method="post" action="./pay.aspx" id="form1"> 2 <div class="aspNetHidden"> 3 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJODIzOTMwMDc3ZGTbIE1Qcr6O1MaNJf5bvD8Tp0AKJJg+NyIEBAajmcsw1g==" /> 4 </div> 5 6 <div class="aspNetHidden"> 7 8 <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="5202EDA5" /> 9 <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAAZXxRmso2FJZVL8LCmbbTgwoTATQtF3V7tpU4YYc7cSY5Q9qbaazGdyvfKTQztyQsoEK/deKjVeubuclCDQacXyqVnJ9g9La52g6r1ve+rc/JOs/XAYrHuElaDr6LBkOxGa3O7hMB7G//QtMFx5OwoF4J8cn3f8fns8a+xdJYVbcg==" /> 10 </div> 11 </form>
这就是一段ViewState保存的页面代码,为了处理页面上复杂的功能,常常会加很多hidden,然后后台服务器端在通过id根据接收到的值来判断页面的状态。
类似这种就可以用ViewState方式实现。ViewState是一种比较好的保存数据方式。
ViewState赋值:ViewState["id"] = '123';
ViewState取值:string bbid = ViewState["id"].ToString();
ViewState和session的不同之处
(1) session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此, 我们可以将一些需要服务器"记住"的变量和对象保存到viewstate里面. 而sesson则只应该应用在需要跨页面且与每个访问用户相关的变量和对象存储上.
(2) session在默认情况下20分钟就过期,而viewstate则永远不会过期.
但viewstate并不是能存储所有的.net类型数据,它仅仅支持String、Integer、Boolean、Array、ArrayList、Hashtable 以及自定义的一些类型.
ViewState的优点:存放在客户端会减轻服务器的负担。
建议不要存放比较机密的信息,因为ViewState要保存在客户端,天生就有安全性的隐患。
如有什么地方讲的不正确,请指正谢谢!