自定义ViewState的保存方式

大家都知道Asp.Net中使用ViewState来在客户端与服务端之间保存页面中的信息及用户自定义的信息.
在2.0之前的版本中,ViewState是保存在页面中的隐藏控件中的:__VIEWSTATE
我们无法改变ViewState的保存方式及保存位置.
现在在2.0中,Asp.Net开放了这个功能,允许我自定义ViewState的保存位置.
在2.0的Page类中新增了一个属性:PageStatePersister.
我们可以重写这个属性来实现自定义ViewState的保存.这个属性要返回一个继承自PageStatePersister类的子类的一个实例.
2.0中默认提供了两种保存方法:一个是保存在页面中(HiddenFieldPageStatePersister ),另外一个是保存在Session中(SessionPageStatePersister ).
下面的代码重写了PageStatePersister属性,将ViewState保存到Session中:

    protected override PageStatePersister PageStatePersister
    {
        get
        {
            return new SessionPageStatePersister(this);
        }
    }
除了这两种默认的保存方式外,我们可以继承PageStatePersister类,来实现自己的保存方式.
以下的代码演示了如果将ViewState保存到文件中:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

/**//// <summary>
/// CWingViewState 的摘要说明
/// </summary>
public class CWingViewState : PageStatePersister
{
    public CWingViewState(Page page):base(page)
    {
    }

    public override void Load()
    {
        ReadFile();
    }

    public override void Save()
    {
        WriteFile();
    }

    private void WriteFile()
    {
        FileStream file = File.Create(@"C:\CustomerViewState.CW");
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(file, base.ViewState);
        file.Flush();
        file.Close();
    }

    private void ReadFile()
    {
        FileStream file = File.OpenRead(@"C:\CustomerViewState.CW");
        BinaryFormatter bf = new BinaryFormatter();
        base.ViewState = bf.Deserialize(file);
    }
}

具体的页面中:
    protected override PageStatePersister PageStatePersister
    {
        get
        {
            return new CWingViewState(this);
        }
    }

出处:.Net空间 BLOG

时间: 2024-10-03 17:08:27

自定义ViewState的保存方式的相关文章

c++-C#与C++位图保存方式的区别是什么?如何将C#中位图buffer正确传到C++代码中?求大神指导

问题描述 C#与C++位图保存方式的区别是什么?如何将C#中位图buffer正确传到C++代码中?求大神指导 C#中位图保存方式与C++中位图保存方式的区别是什么?如何将C#中位图buffer正确传到C++代码中?求大神指导 解决方案 C++中位图分为32/24/16位的三种位图数据存储方式,很多时候C++中主要使用32位和24位,如果你没有特别声明的话.C#中的位图 也多数是32位的.这些所谓的32位或者24位说的是位图中一个像素用多少位来表示,一个像素一般包含RGB三基色,也就是红(red)

WEB标准学习:自定义打开链接的方式

web|web标准|链接 最近继续在准备一个新产品的网站,涉及到W3C标准以及自定义等方面的内容,所以做了一个链接小实例,由于在XHTML1.0过渡型标准之前,target="_blank"属性一直是点击链接后弹出新窗口的方法,但是XHTML1.0严格型标准以及XHTML1.1之后就不再支持target属性,也就是说不能再用target="_blank"来弹出一个新的窗口!本实例探讨的就是在XHTML1.1标准下弹出新窗口的方法,并结合Cookies实现客户端自定义

C#不用ViewState怎么保存状态

问题描述 如题不用viewstate如何保存状态 解决方案 解决方案二:不用ViewState,你又需要保存状态,那么你就要自己发明一套ViewState.当你将EnableViewState设置为false,或者你去掉了<Formrunat="server">默认标签,这时候你就不应该再考虑回发了.这时候的web服务器端编程就需要回到了20世纪的编程水平,也就是asp最初的状态,也就是说页面的提交都是"跳转"(包括自己向自己的跳转),也就是永远都是Is

创建Python数据分析的Docker镜像+Docker自定义镜像commit,Dockerfile方式解析+pull,push,rmi操作

实例解析Docker如何通过commit,Dockerfile两种方式自定义Dcoker镜像,对自定义镜像的pull,push,rmi等常用操作,通过实例创建一个Python数据分析开发环境的Docker镜像.1.通过commit操作在一个已有的镜像上做更改而保存为新的镜像.2.实例解析Dockerfile自定义镜像原理过程和命令规则.3.实例解析对自定义镜像做pull,push,rmi等常用操作. 0.0.查看本地已有的镜像 wxl@wxl-pc:~$ docker images 其实,本地已

PS自定义图案的保存、删除与填充

  一.自定义图案 如下图一样,首先,建立一画布,大小嘛,基本就在50×50左右的大小就可以了,只不过,要选择透明背景哦. 之后,如下图一样,画好图案后就可以将其保存成为图案了. 如下图一样,找到"编辑"→"定义图案". 弹出下图,下面的对话框中,输入图案的名称即可. 二.删除自制图案 如果自定义的图案不需要了,可以将其删除,方法如下. "编辑"→"预设管理器". 弹出如下图,在类型那里先选择"图案",然后

Android应用开发中数据的保存方式总结_Android

一.保存文件到手机内存 /** * 保存数据到手机rom的文件里面. * @param context 应用程序的上下文 提供环境 * @param name 用户名 * @param password 密码 * @throws Exception */ public static void saveToRom(Context context, String name , String password) throws Exception{ //File file = new File("/da

Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件

Android绘图机制(三)--自定义View的三种实现方式以及实战项目操作 在Android绘图机制(一)--自定义View的基础属性和方法 里说过,实现自定义View有三种方式,分别是 1.对现有的控件进行扩展 2.通过组件来实现新的控件 3.重写View来实现全新的控件 所以本节就来带大家把这个流程走一遍,我们用到的项目还是 Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 本节现在就是做一个真正意义上的自定义View的操

Android App中各种数据保存方式的使用实例总结_Android

少量数据保存之SharedPreferences接口实例SharedPreferences数据保存主要是通过键值的方式存储在xml文件中 xml文件在data/此程序的包名/XX.xml. 格式: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <int name="count" value="3" /> <string name="ti

Android应用开发中数据的保存方式总结

一.保存文件到手机内存 /** * 保存数据到手机rom的文件里面. * @param context 应用程序的上下文 提供环境 * @param name 用户名 * @param password 密码 * @throws Exception */ public static void saveToRom(Context context, String name , String password) throws Exception{ //File file = new File("/da