保存页的所有视图状态信息和控件状态信息。

基于SEO技术的开发,在没有接触MVC框架 Razor 引擎的时候,我们需要使用ASP.NET引擎,如果使用ASP.NET引擎的服务器端控件,那么在ASP.NET页面中就会生成 __Viewstate隐藏域 ,__Viewstate隐藏域产生的“ 乱码 ”对网络爬虫是极其不友好!!

“ 乱码 ”如下:

 <div class="aspNetHidden">
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAAevVXD1oYELeveMr0vHCmYP7LzJrIcTIdqhSMKVwuzUlG+r/E5r2IBU8/usjBP6bvE2c4iS0S7hMhxw1JoNuYef5SWTLAaw1o1yUXny4tbozOKqfv7TXcRdFrrz4sk+amqJ1HXkqp47r3PB8OAXkfQkk9SVCu9vqcV7t6ajMdAYdjyd0irvSRGXq8LavSPmz9M=" />
</div>

那么所有 问题 就来了,在 商业项目 开发中就需要我们把__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;
}

ASP.NET页面中去除VIEWSTATE视图状态乱码的更多相关文章

  1. ASP.NET页面中去除VIEWSTATE视

    保存页的所有视图状态信息和控件状态信息. 源码:http://www.jinhusns.com/Products/Download/?type=xcj 作者在早期参与的项目中曾遇到这样的需求:基于SE ...

  2. [转] c# 模拟Asp.net页面中的某个按钮的点击,向web服务器发出请求

    在没有做题目中所述的内容的时候,感觉这应该是很简单的东西,但是当真正开始做的时候却发现,有很多问题现在在这里写出来,供和我一样水平不高的参考一下. 在写本文之前参照了一下文章 欢迎使用CSDN论坛阅读 ...

  3. 使用C#模拟ASP.NET页面中按钮点击

    c# 模拟Asp.net页面中的某个按钮的点击,向web服务器发出请求 主要就组织要提交的数据,然后以post方式提交. 假设我们有如下的网页 1 <% @ Page Language = &q ...

  4. Asp.net页面中调用soapheader进行验证的操作步骤

    Asp.net页面中调用以SOAP头作验证的web services操作步骤 第一步:用来作SOAP验证的类必须从SoapHeader类派生,类中Public的属性将出现在自动产生XML节点中,即: ...

  5. 如何在ASP.NET页面中使用异步任务(PageAsyncTask)

    在页面加载期间,可能有些操作是要比较耗用时间的(例如调用外部资源,要长时间等待其返回),正常情况下,这个操作将一直占用线程.而大家知道,ASP.NET在服务端线程池中的线程数是有限的,如果一直占用的话 ...

  6. AJAX在GBK编码页面中传中文参数乱码的问题

    ---恢复内容开始--- 页面编码是GBK的情况下传递中文有乱码,解决方法如下: 在ajax传递前用若是Array,JSON,等其它对象,可用JSON.stringfy字符串序列化后,赋值给ajax传 ...

  7. 页面中去除浮动 clear:both

    今天写代码发现一个很奇怪的问题,发现上面的div加浮动(不管是否包含div)以后对下面div的浮动有所影响,通过去除浮动,搞定: 只需要在受影响的div中的样式中,加入clear:both即可

  8. asp.net页面中的Console.WriteLine结果如何查看

    其实用Console.WriteLine("xxxxx"),在asp.net Web程序,在输出窗口是不会输出结果的,应该用Debug.WriteLine("xxxxx& ...

  9. asp.net页面中实现如果图片不存在则显示默认图片

    onerror="this.src='/SysAdmin/images/noTouXiang.jpg';"

随机推荐

  1. HDU2048

    http://acm.hdu.edu.cn/showproblem.php?pid=2048 这道题是错位排序的思想 我们先来考虑第n个数,假设把他放在第k的位置,有n-1种放的方法,那么对于第k位置 ...

  2. LVM原理及PV、VG、LV、PE、LE关系图

    PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区.VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立 ...

  3. load mainaccount

    static void LoadMainAccountCSV(Args _args) { /* SysExcelApplication        excel; SysExcelWorkbooks  ...

  4. 读取数据库的表并绑定到Listview

    $aResultEventlog = _GetQueryTable($strSQL_Compare_FailRecordEventIDs, $iRowsEventlog, $iColsEventlog ...

  5. 嵌套 QQ、微博 通讯工具到HTML中

    自己QQ.微博的实例: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Defa ...

  6. 移动端rem页面详谈

    rem布局是移动端常见的布局之一,也是较为成熟的方案.接下来就详细说以下rem布局的实际操作. 1.首先加<meta />标签,设置视口的大小,不多说. <meta name=&qu ...

  7. ES6 学习笔记(1)

    恰逢换工作之际,新公司的是以 ES6 + webpack + vue 为技术栈, 正好ES6是我下个学习目标, 因此买了阮老师的 ES6标准入门,也当是支持阮老师了. 笔记将会照着这本书的阅读展开而做 ...

  8. VMWare MAC系统调整磁盘

    VMware,打开虚拟文件,调整磁盘大小. 从40G调整到80G 进入虚拟机,打开终端 diskutil list;diskutil resizeVolume disk0s2 80GB http:// ...

  9. 分析一个类似于jquery的小框架

    在网上下了一个类似于jQuery的小框架,分析源码,看看怎么写框架. 选择器Select //用沙箱闭包其整个代码,只有itcast和I暴漏在全局作用域 (function( window , und ...

  10. java 枚举

    DK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 用法一:常量 在JDK1.5 之前,我们定义常量都是: publicstaticfianl... ...