ViewState(页面级)

l两种使用方式: 作用域---页面级
1.用户数据保存方式
   ViewState["myKey"]="MyData";
   读取数据方式:
   string myData;
         if(ViewState["myKey"]!=null)
         {  myData=(string)ViewState["myKey"];  }
   注意:ViewState不能存储所有的数据类型,仅支持可序列化对象。
       2.非单值服务器控件的状态也自动保存在ViewState中
列入:下拉框。(文本框是单值控件,所以不会保存在ViewState中)
 
l使用ViewState的前提:
页面上必须有一个服务器端窗体标记(<form runat=“server”>)
 
         服务器在接收到用户请求一个页面后,会自动在请求报文中找看是否包含__VIEWSTATE的隐藏
                  域,如果有,则将中间的值解码后添加到页面的ViewState属性中。
         服务器在输出的时候,也会自动的将ViewState中的值添加到表单里名叫__VIEWSTATE的隐藏域中
                 lVIEWSTATE适用于同一个页面在不关闭的情况下多次与服务器交互
 
这种方法的问题:
缺点:加大网站的流量、降低访问速度、机密数据放到表单中会有数据欺骗等安全性问题。故事:自行打印存折,因为余额不是写到存折这个隐藏字段中的,唯一的关联就是卡号。要把机密数据放到服务器,并且区别不同的访问者的私密区域,那么就要一个唯一的标识。
跨页面提交的__VIEWSTATE不会被目标页面装入页面的ViewState属性中
查看生成的源代码,ASP.Net将所有隐藏内容统一放到了名字为__VIEWSTATE的隐藏字段(必须是name=__VIEWSTATE中,使用序列化算法将所有隐藏内容放到一个字符串中。点击几次在使用ViewStateDecoder这个工具查看ViewState内容,发现了确实将这些改变的内容放到了ViewState中。存储非表单域、非value值的容器。
 
 
posted @ 2013-04-07 21:46  Big.Eagle  阅读(226)  评论(0)    收藏  举报