zoukankan      html  css  js  c++  java
  • ASP.NET页面中去除VIEWSTATE视

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

    源码: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;
        }
  • 相关阅读:
    Feature euerka Consul zookeeper etcd
    mysql配置参数
    镜像网站
    携程Apollo分布式配置中心部署以及使用
    linux 基础知识 之基础网络
    linux 基础知识 之基础系统管理
    linux安全
    java.多态
    java.抽象、接口
    使用Vscode
  • 原文地址:https://www.cnblogs.com/xiaoxiaojia/p/5473882.html
Copyright © 2011-2022 走看看