zoukankan      html  css  js  c++  java
  • ASP.NET页面中去除VIEWSTATE视图状态乱码

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

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

    “ 乱码 ”如下:

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

    那么所有 问题 就来了,在 商业项目 开发中就需要我们把__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;
      }
    View Code
  • 相关阅读:
    C#Windows服务程序安装常见问题解决方法
    解决access 导出 excel 字段截断错误的问题
    MySQL创建方法错误:This function has none of DETERMINISTIC, NO SQL
    解决问题 “You don't have permission to access /index.html on this server.”
    无法枚举容器中的对象,访问被拒绝的解决方法
    php xml操作
    php 字符串截取函数
    PHP iconv 解决utf-8和gb2312编码转换问题
    IIS6,IIS7中查看w3wp进程
    Solaris设备管理
  • 原文地址:https://www.cnblogs.com/KoalaAPI/p/4063778.html
Copyright © 2011-2022 走看看