随笔-41  评论-40  文章-0  trackbacks-2
2007.8.18和19号,我再次游玩了大明山,一样的山,一样的水,还是那样的尽兴;唯独更换了伙伴。远离水泥森林,漫步在山道上,是那样的悠闲、愉悦。晚上回到家,我居然很有兴致的看起ASP.NET2.0书来,看了一章关于介绍ViewState,对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方法来实现。

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

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

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

以上是处理ViewState的一些方法,写起来太累,至于具体实现方法的代码,可以网上搜索一下,欢迎大家提出更好的意见。

posted on 2007-08-20 16:19 Yolion 阅读(381) 评论(4)  编辑 收藏 所属分类: ASP.Net 2.0

评论:
#1楼  2007-08-24 09:42 | Clark Zheng      
在实际的项目中,我经常看到ViewState的长度有几个屏幕的看不完的情况

那这个网页访问起来会不会很慢?
  回复  引用  查看    
#2楼 [楼主] 2007-08-24 11:20 | Yolion      
如果ViewState数据量大的话,网页访问肯定是会慢的。
我们只能在实际的开发中,避免ViewState数据过大,大小不超过总页面的30%。

以上是个人看法,还请达人提出宝贵意见。
  回复  引用  查看    
#3楼  2007-10-26 10:12 | hhkkj [未注册用户]
我用了你说的软件后,得到<?xml version="1.0" encoding="utf-16"?>
<viewstate>
<Pair>
<Pair>
<String>2103359461</String>
</Pair>
</Pair>
</viewstate>
请问我要想取网页中的用户名,密码还得怎么办?
www.xx.com/.......&username=&password=

  回复  引用    
#4楼 [楼主] 2007-10-30 18:56 | Yolion      
楼上,请说清楚一点,你要在怎么情况下,来获取密码。
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-08-20 16:21 编辑过


相关链接: