ViewState

 ViewState的出现,使我们开发程序变得更加方便、快捷,但是它也使我们的程序变得臃肿。ViewState可以很方便的帮我们存储控件的状态和值(ASP.NET2.0有ControlState,专门来保存控件的状态),当页面以Html方式展现在我们面前的时候,ViewState是以一个隐藏控件的方式写在Html中,如:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMjgzMDgzOTgzZGRqBJ2DrJA0WVW8LiR3445iRDt1sg==" />

value保存了控件状态和值,采用Base64编码方式保存,大家可以从http://www.pluralsight.com/tools.aspx上下载Fritz OnionViewState解码器ViewState Decoder (2.2)。具体的使用方法,自己下载下来使用,比较简单。ViewState很容易进行解码,因此敏感的信息最好不要保存在ViewState中。
       
在实际的项目中,我经常看到ViewState的长度有几个屏幕的看不完的情况。如果遇到防火墙对POST请求值有最大尺寸限制的情况下,问题就会出现,常常会被防火墙拒绝。
       
这个时候,就需要我们采用合理的方法来处理ViewState,通常我们建议ViewState的大小不超过总页面的30%
1、分解ViewState
ASP.NET2.0
开始在Page类中有MaxPageStateFieldLength属性,以字节为单位。这样的话,如果ViewState的长度超过最大长度,就会自动分解成多个块。ASP.NET1.1中还没有这个功能,实现起来也没有这么方便,需要重写LoadPageStateFromPersistenceMediumSavePageStateToPersistenceMedium方法来实现。

ASP.NETPage类包含两个可以重写的方法LoadPageStateFromPersistenceMedium SavePageStateToPersistenceMedium。在这些方法中,可以确定要对页面的ViewState进行什么处理。

SavePageStateToPersistenceMedium方法把ViewState对象作为输入,并可以用任意方式存储它LoadPageStateFromPersistenceMedium方法必须从存储位置加载以前的ViewState

2、压缩ViewState
我们可以从icsharpcode.net上下载开源的SharpZipLib库,来实现ViewState的压缩和解压缩。

3、把ViewState放到其他位置存储
ViewState超过20k,或者更大的时候。我们可以考虑把ViewState存储到Session中,每个页面有自己的GUID,这个GUID声明作为value值,根据GUID来设置和读取ViewState的值。也可以通过重写LoadPageStateFromPersistenceMediumSavePageStateToPersistenceMedium方法来实现。

4、把ViewState移到页面底部
通过重写页面的Render方法来实现。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值