ASP.NET页面中去除VIEWSTATE视
2018-06-17 19:23:55来源:未知 阅读 ()
保存页的所有视图状态信息和控件状态信息。
源码:http://www.jinhusns.com/Products/Download/?type=xcj
作者在早期参与的项目中曾遇到这样的需求:基于SEO技术的开发,当因为时没有接触的MVC框架的Razor引擎,所以只能用ASP.NET引擎,如果使用ASP.NET引擎的服务器端控件,那么在ASP.NET页面中就会生成__Viewstate隐藏域,__Viewstate隐藏域产生的“乱码”对网络爬虫是极其不友好的!!
“乱码”如下:
所有问题就来了,在商业项目开发中就需要我们把__Viewstate隐藏域生成的“乱码”去除掉。
这里我们讨论如下几个方案。
方案一:
去掉form的标签的 runat="server" 属性的话,就可以不生成__viewstate隐藏域,但是服务器控件就没法用了,所以在需要使用服务器端正控件的时候就此方法是行不通的。
方案二:
给服务器端正控件的EnableViewState属性设置为false,此时我们发现网页的Viewstate有明显代码减少,但还是存在视图状态。。。
方案三:
些方案需要了解.NET的一些基类,如System.Web.dll。
System.Web.dll封装了LosFormatter类。
在MSDN上对此类的描述是: 序列化 Web 窗体页的视图状态。
此时我们需要LosFormatter类里封装的Serialize方法,功能描述如下:将有限对象序列化 (LOS) 格式的对象转换为视图状态值并将结果放置在 System.IO.Stream 对象中。
去除国“乱码”代码如下:
/// <summary> /// 去除VIEWSTATE乱码代码如下所示: /// </summary> protected LosFormatter losFormatter = new LosFormatter(); /// <summary> /// 序列化所有视图状态信息和控件状态信息。 /// </summary> /// <param name="viewState">要在其中存储视图状态信息的 Object</param> protected override void SavePageStateToPersistenceMedium(object viewState) { string val = Request.Url + "__VIEWSTATE"; System.IO.MemoryStream stream = new System.IO.MemoryStream(); losFormatter.Serialize(stream, viewState); stream.Flush(); Session[val] = stream; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:1.0从零到一个完全网站开发
下一篇:使用线程池而不是创建线程
- uniGUI之多页面框架(16) 2020-02-07
- uniGUI页面标题和页面背景颜色的更改(03) 2020-02-01
- PHP页面静态化 2018-07-22
- 页面制作之开发调试工具(1) 2018-06-21
- ASP.NET简单验证码 2018-06-21
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash