ViewState
ASP.Net将所有隐藏内容统一放到了名字为__VIEWSTATE的隐藏字段中,使用序列化算法将所有隐藏内容放到一个字符串中。
用于保存上一次操作的信息。
ViewState原理
1)隐藏一些字段,用来存放那些没有value属性值的控件
2)因为http是无状态的协议,所以当页面发生改变的时候,会用viewstate保持页面上一次的状态。
3)例如:label控件被浏览器渲染成<span>标记,所以label的值就存在了viewstate中;
同理,textbox控件也被浏览器渲染成了input标记,TextBox中的值不用存,因为TextBox本质上就是input,input自己会提交给服务器,不需要隐藏字段。
1)隐藏一些字段,用来存放那些没有value属性值的控件
2)因为http是无状态的协议,所以当页面发生改变的时候,会用viewstate保持页面上一次的状态。
3)例如:label控件被浏览器渲染成<span>标记,所以label的值就存在了viewstate中;
同理,textbox控件也被浏览器渲染成了input标记,TextBox中的值不用存,因为TextBox本质上就是input,input自己会提交给服务器,不需要隐藏字段。
4)可以通过ViewStateDecoder工具查看viewstate中的容的本来面目。
状态信息保存在隐藏字段中(viewstate)的优缺点
1)加大网站流量
2)降低访问速度
3)机密数据放到表单中会有数据欺骗等安全性问题(如网银等)。*
1)加大网站流量
2)降低访问速度
3)机密数据放到表单中会有数据欺骗等安全性问题(如网银等)。*
禁用ViewState
- 默认情况下ASP.Net是启用ViewState的,这样在页面中会生成冗长的隐藏字段,ViewState对于需要PostBack处理的页面才可能有用,对于新闻展示页面不需要交互完全没必要用ViewState
- 禁用ViewState的方式:
- 页面整体禁用ViewState:在顶部Page中EnableViewState="False"
- 指定控件禁用ViewState,在控件上EnableViewState="False"
- 页面禁用ViewState以后并没有完全去掉ViewState,只要ViewState不是很大就可以了。如果要求一点儿ViewState都不能有,那么则页面中不能有runat=server的form,如果页面中没有表单元素,把form完全去掉就可以。