如果你有在IE中查看当前浏览页面HTML源代码的习惯,你也许常会看到类似以下的代码片断:

<input type="hidden" name="__VIEWSTATE" value=
"dDwtMzU5NzUyMTQ1O3Q8O2w8aTwwPjs+O2w8dDw7bDxpPDA+Oz47bDx0PDtsPG  ……

聪明的你一定会问,这是什么?有什么作用?它与本篇文章有何转折亲关系?各位看官,且听我慢慢道来。

其实,这就是MS在ASP.NET应用ViewState技术的特征表现。为了页面能在PostBack后依然能读取服务器控件原有的状态数据,而ASP.NET应用ViewState技术本质上是用一个默认名称为"__VIEWSTATE的 Hidden类型表单域来保存和传递数据(这些数据是经过了序列化后Base64编码的字符串值,且是在方法 Page.SavePageStateToPersistenceMedium输出前保存、并由 Page.LoadPageStateFromPersistenceMedium加载)。虽然我们可以通过三种级别来轻松禁用掉这些数据的往返传递:

Machine级  在machine.config中设置< pages enableViewStateMac='false' />
Application级  在Web Applicatin的web.config中设置< pages enableViewStateMac='false' />
单页面级  在该页面中设置<  enableViewStateMac='false' %>或通过代码设置Page.EnableViewStateMac = false;

可是,如果我们完全能通过禁用ViewState来解决数据传输负担而且不产生副作用的话,那MS的架构师们也不会傻到如此可爱的地步(可有可无的东东留它何用?),正因我们往往不能通过简单的禁用来解决这个传输负担问题,所以我们只能另辟路径使之在网络往返中传输量尽可能地小,于是,压缩成了我们的首选。只要我们重载Page类的 SavePageStateToPersistenceMedium()方法与 LoadPageStateFromPersistenceMedium()方法,并在重载方法中对数据进行压缩与解压的处理即可。开源项目SharpZipLib提供的类GZipInputStream与GZipOutputStream进入了我们的视野,为了方便,不妨写个类CompressionHelper,代码如下:

using System.IO;  using ICSharpCode.SharpZipLib.GZip;   namespace Ycweb.Components  {  /** <summary> /// Summary description for CompressionHelper.  /// </summary> public class CompressionHelper  {  public CompressionHelper()  {   // TODO: Add constructor logic here   }   /** <summary> /// 压缩数据  /// </summary> /// <param name="data">待压缩的字节数组</param> /// <returns>压缩后的字节数组</returns> public static byte[] CompressByte(byte[] data)  {  MemoryStream ms = new MemoryStream();  Stream s=new GZipOutputStream(ms);      s.Write( data, 0, data.Length );  s.Close();  return ms.ToArray();      }   /** <summary> /// 解压数据  /// </summary> /// <param name="data">待解压的字节数组</param> /// <returns>解压出的字节数组</returns> public static byte[] DeCompressByte(byte[] data)  {  byte[] writeData = new byte[2048];  MemoryStream ms= new MemoryStream( data );  Stream sm = new GZipInputStream(ms) as Stream;  MemoryStream outStream = new MemoryStream();  while (true)  {  int size = sm.Read(writeData,0, writeData.Length );  if (size >0)  {  outStream.Write(writeData,0,size);  }  else  {  break;  }  }  sm.Close();  byte[] outArr = outStream.ToArray();  outStream.Close();  return outArr;      }  }  }

浅析ASP.NET应用ViewState技术相关推荐

  1. 浅析ASP.NET的Page.IsPostBack 属性

    浅析ASP.NET的Page.IsPostBack 属性 http://www.sina.com.cn 2008年05月06日 11:33  IT168.com [IT168技术文档] 现在从对ASP ...

  2. 浅析ASP.NET的Page.IsPostBack 属性http://www.sina.com.cn 2008年05月06日 11:33 IT168.com

    浅析ASP.NET的Page.IsPostBack 属性 http://www.sina.com.cn 2008年05月06日 11:33  IT168.com [IT168技术文档] 现在从对ASP ...

  3. 《圣殿祭司的ASP.NET4.0专家技术手册》---- 1-13 ClientBuilderManager类别的编译功能...

    本节书摘来自异步社区<圣殿祭司的ASP.NET4.0专家技术手册>一书中的第1章,第13节,作者: 奚江华,译者: 武海军 , 更多章节内容可以访问云栖社区"异步社区" ...

  4. 艾伟_转载:ASP.NET模板引擎技术

    以前听我朋友说起php的模板引擎技术的时候似懂非懂哪时感觉真的很强,一直在想asp.net有这种技术吗?我不知道我的理解是不是对的.其实 asp.net的模板引擎技术就是先建好一个静态的html页面我 ...

  5. asp.net的ViewState学习

    这些还是前辈们都研究烂的东东,我也只是COPY他们的成果,好了,什么也不说了,先来一张表: 页面事件 ViewState相关操作 PreInit 设置控件静态属性 Init 执行TrackViewSt ...

  6. asp用于取代什么技术_ASP是不是已经被淘汰了?

    ASP从软件的技术层面看,ASP有如下的特点: 1>. 无需编译 ASP脚本集成于HTML当中,容易生成,无需编译或链接即可直接解释执行. 2>. 易于生成 使用常规文本编辑器(如WIND ...

  7. ASP.NET模板引擎技术

    以前听我朋友说起php的模板引擎技术的时候似懂非懂哪时感觉真的很强,一直在想asp.net有这种技术吗?我不知道我的理解是不是对的.其实 asp.net的模板引擎技术就是先建好一个静态的html页面我 ...

  8. 95后实习生的远程办公体验(asp.net mvc\C#技术栈)

    这个月我们做了一件别人看起来很疯狂的事情,就是让一批95后的实习生实行远程办公,效果还不错,于是写此文总结一下. 其实认真算算,我自己的远程工作经验有十年了吧,在北京工作的时候天气不好就申请在家办公, ...

  9. 小议ASP.NET模板引擎技术的使用

    我们将从PHP模板引擎技术谈谈ASP.NET模板引擎技术,希望通过本文的实例和代码,能让大家在今后的开发过程中更加灵活的运用ASP.NET模板引擎技术. 以前听我朋友说起php的模板引擎技术的时候似懂 ...

最新文章

  1. JavaScript replace() 方法
  2. mysql监控 hp_0066 使用PHP和MySQL实现学生分数信息管理
  3. 并发编程-15并发容器(J.U.C)核心 AbstractQueuedSynchronizer 抽象队列同步器AQS介绍
  4. python爬虫淘宝评论_Python爬取淘宝店铺和评论
  5. python读txt写入excel_Python读取txt内容写入xls格式excel中的方法
  6. 3140: [Hnoi2013]消毒
  7. 去除字符串中的html标记
  8. EF6+Sqlite连接字符串的动态设置
  9. Navicat Win 和 Mac 视图类快捷键对比
  10. 解释为什么用梯度下降而不是直接求导数为0的解?
  11. Java中计算包含汉字字符串长度的方法
  12. matlab精度高保存图片
  13. 10月14日科技资讯|华为折叠屏手机月底或开卖;苹果计划 3 年内推出 5G 基带芯片;Node.js 12.12.0 发布 | 极客头条
  14. matlab中eval的用法
  15. 南浔区跨境电子商务公共服务中心今日揭牌!
  16. w ndows摄像头驱动怎么安,一步一步教你安装如何摄像头驱动(图)
  17. 国信证券学习系列(3)
  18. 图像特征提取(三)——SURF特征提取算法详解
  19. R语言七天入门教程一:配置运行环境
  20. 前端开发:关于鉴权的使用总结

热门文章

  1. QT的QStylePainter类的使用
  2. C++ Priority Queues(优先队列)
  3. django 不用自带的mysql_21_django配置使用mysql数据库的两种方式
  4. java poi doc转docx_Java 插入Word分页符、分节符
  5. java returnAddres_JavaClient 查询ES-(重要)
  6. 经典卷积网络进阶--GoolgleNet详解
  7. 嵌入式Linux上通过boa服务器实现cgi/html的web上网【转】
  8. cxf整合spring错误为:cvc-complex-type.2.4.c
  9. VR與AI的激情相遇
  10. 移除单链表的倒数第N个节点