浅析ASP.NET应用ViewState技术
如果你有在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技术相关推荐
- 浅析ASP.NET的Page.IsPostBack 属性
浅析ASP.NET的Page.IsPostBack 属性 http://www.sina.com.cn 2008年05月06日 11:33 IT168.com [IT168技术文档] 现在从对ASP ...
- 浅析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 ...
- 《圣殿祭司的ASP.NET4.0专家技术手册》---- 1-13 ClientBuilderManager类别的编译功能...
本节书摘来自异步社区<圣殿祭司的ASP.NET4.0专家技术手册>一书中的第1章,第13节,作者: 奚江华,译者: 武海军 , 更多章节内容可以访问云栖社区"异步社区" ...
- 艾伟_转载:ASP.NET模板引擎技术
以前听我朋友说起php的模板引擎技术的时候似懂非懂哪时感觉真的很强,一直在想asp.net有这种技术吗?我不知道我的理解是不是对的.其实 asp.net的模板引擎技术就是先建好一个静态的html页面我 ...
- asp.net的ViewState学习
这些还是前辈们都研究烂的东东,我也只是COPY他们的成果,好了,什么也不说了,先来一张表: 页面事件 ViewState相关操作 PreInit 设置控件静态属性 Init 执行TrackViewSt ...
- asp用于取代什么技术_ASP是不是已经被淘汰了?
ASP从软件的技术层面看,ASP有如下的特点: 1>. 无需编译 ASP脚本集成于HTML当中,容易生成,无需编译或链接即可直接解释执行. 2>. 易于生成 使用常规文本编辑器(如WIND ...
- ASP.NET模板引擎技术
以前听我朋友说起php的模板引擎技术的时候似懂非懂哪时感觉真的很强,一直在想asp.net有这种技术吗?我不知道我的理解是不是对的.其实 asp.net的模板引擎技术就是先建好一个静态的html页面我 ...
- 95后实习生的远程办公体验(asp.net mvc\C#技术栈)
这个月我们做了一件别人看起来很疯狂的事情,就是让一批95后的实习生实行远程办公,效果还不错,于是写此文总结一下. 其实认真算算,我自己的远程工作经验有十年了吧,在北京工作的时候天气不好就申请在家办公, ...
- 小议ASP.NET模板引擎技术的使用
我们将从PHP模板引擎技术谈谈ASP.NET模板引擎技术,希望通过本文的实例和代码,能让大家在今后的开发过程中更加灵活的运用ASP.NET模板引擎技术. 以前听我朋友说起php的模板引擎技术的时候似懂 ...
最新文章
- JavaScript replace() 方法
- mysql监控 hp_0066 使用PHP和MySQL实现学生分数信息管理
- 并发编程-15并发容器(J.U.C)核心 AbstractQueuedSynchronizer 抽象队列同步器AQS介绍
- python爬虫淘宝评论_Python爬取淘宝店铺和评论
- python读txt写入excel_Python读取txt内容写入xls格式excel中的方法
- 3140: [Hnoi2013]消毒
- 去除字符串中的html标记
- EF6+Sqlite连接字符串的动态设置
- Navicat Win 和 Mac 视图类快捷键对比
- 解释为什么用梯度下降而不是直接求导数为0的解?
- Java中计算包含汉字字符串长度的方法
- matlab精度高保存图片
- 10月14日科技资讯|华为折叠屏手机月底或开卖;苹果计划 3 年内推出 5G 基带芯片;Node.js 12.12.0 发布 | 极客头条
- matlab中eval的用法
- 南浔区跨境电子商务公共服务中心今日揭牌!
- w ndows摄像头驱动怎么安,一步一步教你安装如何摄像头驱动(图)
- 国信证券学习系列(3)
- 图像特征提取(三)——SURF特征提取算法详解
- R语言七天入门教程一:配置运行环境
- 前端开发:关于鉴权的使用总结
热门文章
- QT的QStylePainter类的使用
- C++ Priority Queues(优先队列)
- django 不用自带的mysql_21_django配置使用mysql数据库的两种方式
- java poi doc转docx_Java 插入Word分页符、分节符
- java returnAddres_JavaClient 查询ES-(重要)
- 经典卷积网络进阶--GoolgleNet详解
- 嵌入式Linux上通过boa服务器实现cgi/html的web上网【转】
- cxf整合spring错误为:cvc-complex-type.2.4.c
- VR與AI的激情相遇
- 移除单链表的倒数第N个节点